包含以下值的表:
Column1 Column2
1 NULL
NULL 4
2 NULL
NULL 5
3 6
以下查询:
SELECT
SUM([Column1] + [Column2] )
FROM [myTable]
当应该返回9
时,返回值21
。为什么?它是如何达到价值的?
我知道可以通过添加ISNULL
来纠正SUM:
SELECT
SUM(ISNULL([Column1], 0) + ISNULL([Column2], 0))
FROM [myTable]
但我想知道值9
答案 0 :(得分:6)
使用COALESCE
将 null 转换为0
。 (如果您想将空值设为零,那就是它。)
SELECT SUM(COALESCE(column1,0) + COALESCE(column2,0))
FROM table1
答案 1 :(得分:4)
null
和数字之和究竟是多少?请注意9
来自的位置:唯一具有非空Column1
和Column2
的行。
One viable solution当然已经发布了。但是,跳到修复中的乐趣在哪里?
(根据OP的要求复制)
答案 2 :(得分:3)
因为它在求和之前加上值+ NULL
尝试sum(column1)+ sum(column2)
答案 3 :(得分:1)
使用ISNULL函数获得所需的行为:
SELECT SUM(ISNULL(Column1, 0) + ISNULL(Column2, 0)) FROM [myTable]
答案 4 :(得分:1)
Null值存在问题。
SELECT SUM(IsNull(Column1, 0) + IsNull(Column2, 0) ) FROM [myTable]
确保它始终为0。
谢谢
答案 5 :(得分:1)
这就是为什么你的结果是9的原因。 ISNULL(表达式,replacement_value)可以在这种情况下帮助您。 :)
答案 6 :(得分:1)
另一种解释(以防万一对某人有效):
NULL影响+
,但不影响SUM()
:其中NULL为+
- ed,它的计算结果为NULL,它是SUMmed,它被忽略。 (但SUM()
可以在没有单个参数是值时返回NULL。)
因此,数据样本中只有一行(最后一行)为+
生成非NULL结果,结果为9
,这是{{1}也会返回。