我使用CTE来计算日志中的时间跨度,如下所示:
http://www.sqlfiddle.com/#!3/b99448/6
请注意,其中一行的值为NULL
,因为这是最新的日志条目,无法进行任何计算。
但是,如果我SUM
这些结果,NULL
被视为零:
http://www.sqlfiddle.com/#!3/b99448/4
如何让它停止忽略NULL值?
我希望总和为NULL
,因为它正在添加NULL
值。
答案 0 :(得分:5)
聚合函数忽略NULL
个值。它们不被视为0
- 区别对于AVG()
,MIN()
和MAX()
更为重要。因此,SUM()
仅在所有值均为NULL
时返回NULL
。
如果你想回到NULL
,这是一个简单的表达式:
select (case when count(*) = count(a.DateTimeChangedUtc) and
count(*) = count(b.DateTimeChangedUTC)
then SUM(DATEDIFF(SECOND, a.DateTimeChangedUtc, b.DateTimeChangedUTC))
end) AS TimeSpentSeconds
如果任一参数为NULL
,则返回NULL
。