5

包含以下值的表:

Column1  Column2
1        NULL
NULL     4
2        NULL
NULL     5
3        6

以下查询:

SELECT 
    SUM([Column1] + [Column2] ) 
FROM [myTable]

9返回一个应该何时返回的值21。为什么?它是如何得出价值的?

我知道 SUM 可以通过ISNULL像这样添加来纠正:

SELECT 
    SUM(ISNULL([Column1], 0) + ISNULL([Column2], 0)) 
FROM [myTable]

但我想知道价值背后的逻辑9

4

7 回答 7

7

用于COALESCEnull转换为0. (如果您希望空值为零,就是这样。

SELECT SUM(COALESCE(column1,0) + COALESCE(column2,0))
FROM table1
于 2012-10-30T03:32:02.900 回答
4

null和一个数字究竟是什么?请注意 的9来源:唯一具有非 nullColumn1Column2.

当然已经发布了一种可行的解决方案。但是,直接跳到修复中的乐趣在哪里?

(应OP的要求复制粘贴)

于 2012-10-30T03:52:14.577 回答
3

因为它是在求和之前添加值 +NULL

试试 sum(column1) + sum(column2)

于 2012-10-30T03:35:12.150 回答
1

使用 ISNULL 函数获得所需的行为:

SELECT SUM(ISNULL(Column1, 0) + ISNULL(Column2, 0)) FROM [myTable]
于 2012-10-30T03:32:38.333 回答
1

它是 Null 值的问题。

SELECT SUM(IsNull(Column1, 0) + IsNull(Column2, 0) ) FROM [myTable]

以确保它至少始终为 0。

谢谢

于 2012-10-30T03:34:13.943 回答
1
  1. 数字 + NULL = NULL
  2. SUM(表达式) 函数通过分别计算每一行的表达式来操作,并返回一个 NOT_NULL 值。然后将所有结果相加并返回。

这就是您的结果为 9 的原因。 ISNULL(expression, replacement_value)在这种情况下可以为您提供帮助。:)

于 2012-10-30T03:52:47.653 回答
1

另一种解释(以防它对某人更好):

NULL 影响+但不影响SUM():如果 NULL 是+-ed,它的计算结果为 NULL,它是 SUMmed,它被忽略。(但是当没有一个参数是值时SUM() 可以返回 NULL 。)

因此,您的数据样本中只有一行(最后一行)为 生成非 NULL 结果+,并且该结果是9,这也是SUM()返回的结果。

于 2012-10-30T07:51:00.633 回答