首页 > 解决方案 > SQL Server 2008 中各行的平均值

问题描述

我有下表

Data   Data1  Data2  YTD
-------------------------
1       2      3      
2       3      4     
3       3      6  

YTD列中,我必须平均行数据。我可以在列中使用平均值,但不确定如何跨行平均。

寻找以下结果并使用 SQL Server 2008

 Data   Data1  Data2  YTD
 ---------------------------------
    1       2      3   2 (Average)   
    2       3      4   3 
    3    null      6   4.5

标签: sqlsql-serversql-server-2008

解决方案


我认为cross apply是最简单的方法:

select t.*, v.avg_data
from t cross apply
     (select avg(v.data) as avg_data
      from (values (t.data), (t.data1), (t.data2)) v(data)
     ) v;

使用case表达式,您也可以将其表示为:

select t.*,
       ( (coalesce(t.data, 0) + (t.data1, 0) + coalesce(t.data2, 0)) /
         nullif( (case when t.data is not null then 1 else 0 end) +
                 (case when t.dat1 is not null then 1 else 0 end) +
                 (case when t.dat2 is not null then 1 else 0 end), 0
               )
       ) as avg_data;

然而,这个公式很混乱并且容易出现打字错误。


推荐阅读