我有一个整数值的表。 它们可能是负数,0,正数和NULL。 我需要将NULL作为0,计算给定日期的平均值,如果平均值小于0,则将0放在那里。如何在情况下获得AVG?
我的查询如下:
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语句双聚合函数定义(aggregate语句可能会更加复杂)?
我敢肯定的'SQL Server'将缓存功能执行或结果您的案例中的AVG计算不会执行两次。 – gotqn
如果TSQL具有标量MAX()函数,将会有一个简单的解决方案。也许你可以实现你自己的:http://stackoverflow.com/questions/124417/is-there-a-max-function-in-sql-server-that-takes-two-values-like-math-max-in -ne – Turophile