【发布时间】:2011-06-12 17:07:25
【问题描述】:
我正在编写报告,并希望获得年龄列的平均值。问题是并非所有行都有年龄。
如果列的值为 0 2 4,我希望返回 3,而不是 2。我不能简单地用 WHERE 排除零行,因为我正在使用这些行中的其他列。有没有 AvgIfNotZero 类型的函数?
【问题讨论】:
我正在编写报告,并希望获得年龄列的平均值。问题是并非所有行都有年龄。
如果列的值为 0 2 4,我希望返回 3,而不是 2。我不能简单地用 WHERE 排除零行,因为我正在使用这些行中的其他列。有没有 AvgIfNotZero 类型的函数?
【问题讨论】:
SELECT
AVG (CASE WHEN Value <> 0 THEN Value ELSE NULL END)
....
AVG 不会考虑 NULL 值。或者这个
AVG (NULLIF(Value, 0))
【讨论】:
, ( 从
中选择 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]
【讨论】: