我必须更改由另一个人完成的一些SQL查询(SQL Server 2005),并且在该代码中我经常看到以下结构:
SELECT fieldA, SUM(CASE fieldB WHEN null THEN 0 ELSE fieldB END) as AliasName FROM ...
我不理解case语句,因为据我所知,在一个case中无法检查null,因此我认为上面的代码与:
SELECT fieldA, SUM(fieldB) as AliasName FROM ...
我也做了一些测试,结果没有看到任何差异。我错过了什么,或者我可以通过简短的语句替换上层语句吗?
更新
仅为了完整性,因为答案中没有提到:上面的代码返回与下面的相同的结果。使用的case
构造不会将零替换为零,因此可以省略它。如果原始sql的目的是确保将返回never null,则可以使用coalesce
或isnull
- 运算符(如答案中所述)。
答案 0 :(得分:4)
第二个语句的输出将包含nulls
(当汇总仅具有null
fieldB
值的记录时。如果你不介意的话,你没问题。
如果您想在输出中使用零而不是null
值,请使用:
select fieldA, sum(isnull(fieldB, 0)) as AliasName from ...
答案 1 :(得分:1)
使用
可以更容易实现这一目标SELECT fieldA, COALESCE(fieldB, 0) as AliasName