【发布时间】:2014-03-24 21:21:06
【问题描述】:
我有一个包含整数值的表。 它们可以是负数、0、正数和 NULL。 我需要将 NULL 视为 0,计算给定日期的平均值,如果平均值小于 0,则将 0 放在那里。
我的查询如下:
select
Id,
ValueDate,
case
when avg(isnull(Value, 0)) > 0 then avg(isnull(Value, 0))
else 0
end AvgValue
from SomeTable
where ValueDate = @givenDate
group by Id, ValueDate
如何避免在case语句中定义双重聚合函数(聚合语句可能要复杂得多)?
【问题讨论】:
-
我很确定
SQL Server将缓存函数执行的结果,否则您的AVG计算不会被执行两次。 -
如果 TSQL 有一个标量 MAX() 函数,将会有一个简单的解决方案。也许您可以实现自己的:stackoverflow.com/questions/124417/…