SQL平均每行多列为空

DBA*_*642 5 sql sql-server

我有一张这样的桌子:

|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)

但这仅给我一个价值。我没有主意,面临一个非常紧迫的截止日期,因此我们将不胜感激。

Pau*_*ott 4

不要除以 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)