The sum()
function automatically ignores NULL
. To do what you want, you need an explicit checK:
select (case when count(foo) = count(*) then sum(foo) end)
from #tmp;
If you want to be explicit, you could add else NULL
to the case
statement.
The logic behind this is that count(foo)
counts the number of non-NULL values in foo
. If this is equal to all the rows, then all the values are non-NULL. You could use the more verbose:
select (case when sum(case when foo is null then 1 else 0 end) > 0
then sum(foo)
end)
And, I want to point out that the title is quite misleading. 1 + NULL = NULL
. The issue is with the aggregation functions, not the arithmetic operators.