我的 COUNT CASE WHEN 语句中是否隐含了 ELSE 0?

cob*_*rne 10 sql-server-2008 sql-server

COUNT(CASE WHEN [Column A] = ____ THEN 1 END 和 和有COUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END什么区别?

我一直在使用前者,到目前为止我还没有看到区别;添加的原因是什么ELSE 0- 是否存在 SQL Server 计数错误的情况?

Ken*_*her 23

在第一种情况下,您计算 1 和 NULL 就足够了。(如果 CASE 语句中没有任何条件匹配并且没有 ELSE 子句,则返回 NULL。)不计算 NULL。在第二种情况下,1 和 0。0 可以计数。

快速示例:

CREATE TABLE #CountMe (Col1 char(1));

INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');
INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');

SELECT
    COUNT(CASE WHEN Col1 = 'A' THEN 1 END) AS CountWithoutElse,
    COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE NULL END) AS CountWithElseNull,
    COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE 0 END) AS CountWithElseZero
FROM #CountMe;
Run Code Online (Sandbox Code Playgroud)

输出:

在此处输入图片说明


Jam*_*s Z 9

如果您没有指定 case 语句的 else 部分,则默认情况下它将返回 NULL,在您的情况下这是一件好事,因为 count 将计算非 NULL 值。如果从 case 返回任何其他内容,无论是 1、0 还是 2,都将始终计为 1。

如果您使用 sum 而不是 count,那么您应该返回 1 或 0。