2011-01-20 39 views
16

我正在編寫報告,並且希望獲取年齡列的平均值。問題是並非所有的行都有一個年齡。TSQL - 列中所有值不爲零的所有值的平均值

如果列的值是0 2 4我想要3返回,而不是2我不能簡單地排除零行與WHERE,因爲我使用的是在這些行中的其他列。有沒有像AvgIfNotZero類型的函數這樣的事情?

回答

38
SELECT 

    AVG (CASE WHEN Value <> 0 THEN Value ELSE NULL END) 
    .... 

AVG不會考慮NULL值。或者這

AVG (NULLIF(Value, 0)) 
0

,( SELECT AVG(a)由

 (
     SELECT NULLIF([Column1], 0) 
      UNION ALL 
     SELECT NULLIF([Column2], 0) 
      UNION ALL 
     SELECT NULLIF([Column3], 0) 
      UNION ALL 
     SELECT NULLIF([Column4], 0) 
     ) T (a) 
    ) AS [4 Column Average] 
+0

你應該給一個答案給更多的背景,而不是隻是刪除代碼的OP或未來的讀者可能不理解塊。 – zgue 2018-03-08 13:01:00