我有一张这样的桌子:
|Quality|Schedule|Cost Control|
-------------------------------
|7 | 8.5 |10 |
|NULL | 9 |NULL |
Run Code Online (Sandbox Code Playgroud)
并且我需要计算同一张表中每一行的平均值,因此它看起来像这样:
|Quality|Schedule|Cost Control|AVG|
----------------------------------
|7 | 8.5 |10 |8.5|
|NULL | 9 |NULL |9 |
Run Code Online (Sandbox Code Playgroud)
我使用以下代码完成了此操作:
SELECT r.Quality, r.Schedule, r.CostControl,
((coalesce(r.quality,0)+
coalesce(r.schedule,0)+
coalesce(r.CostControl,0)/3) as Average
FROM dbo.Rating r
Run Code Online (Sandbox Code Playgroud)
给出下表:
|Quality|Schedule|Cost Control|AVG|
----------------------------------
|7 | 8.5 |10 |8.5|
|NULL | 9 |NULL |3 |
Run Code Online (Sandbox Code Playgroud)
我知道问题在于除数在我的select语句中进行了硬编码,但是我不知道如何使它可变。我尝试使用case语句选择一个附加列:
select Count(case when(r.quality) > 0 then 1 else 0 end +
case when (r.Schedule) > 0 then 1 else 0 end +
case when (r.CostControl) > 0 then 1 else 0 end)
Run Code Online (Sandbox Code Playgroud)
但这仅给我一个价值。我没有主意,面临一个非常紧迫的截止日期,因此我们将不胜感激。
不要除以 3,而是使用
(CASE WHEN Quality IS NULL THEN 0 ELSE 1 END +
CASE WHEN Schedule IS NULL THEN 0 ELSE 1 END +
CASE WHEN [Cost Control] IS NULL THEN 0 ELSE 1 END)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1591 次 |
最近记录: |