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)
输出:
如果您没有指定 case 语句的 else 部分,则默认情况下它将返回 NULL,在您的情况下这是一件好事,因为 count 将计算非 NULL 值。如果从 case 返回任何其他内容,无论是 1、0 还是 2,都将始终计为 1。
如果您使用 sum 而不是 count,那么您应该返回 1 或 0。
| 归档时间: |
|
| 查看次数: |
28490 次 |
| 最近记录: |