为什么我的SQL SUM在包含NULL值时不会返回NULL?

Mat*_*hew 3 sql sql-server-2008

我使用CTE来计算日志中的时间跨度,如下所示:

http://www.sqlfiddle.com/#!3/b99448/6

请注意,其中一行具有NULL值,因为这是最新的日志条目,无法进行计算.

但是,如果我将SUM这些结果NULL视为零:

http://www.sqlfiddle.com/#!3/b99448/4

如何让它停止忽略NULL值?我希望总和是NULL因为它正在增加一个NULL值.

Gor*_*off 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
Run Code Online (Sandbox Code Playgroud)

NULL如果任何一个参数都返回,则返回NULL.