Then 1 else 0 在与聚合函数一起使用的 CASE 表达式中是什么意思?

Rav*_*avi 5 sql-server

SUM(CASE WHEN column1 = 'value1' THEN 1 ELSE 0 END),
SUM(CASE WHEN column2 = 'value2' THEN 1 ELSE 0 END)..
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我发现很难理解上述语句中究竟发生了什么以及“Then 1 else 0”在这里做什么。

Aar*_*and 14

如果column1包含该值,value1CASE表达式将返回 1,并SUM()为该行添加 1。如果不是,则CASE表达式将返回 0,并为该行添加 0。这是一种计算 中有多少行value1的方法column1,但还有其他方法可以做到这一点,例如在 2012+ 上:

SELECT COUNT(IIF(column1 = 'value1', 'truish', NULL))
Run Code Online (Sandbox Code Playgroud)

在早期版本上:

SELECT COUNT(CASE WHEN column1 = 'value1' THEN 'truish' END)
Run Code Online (Sandbox Code Playgroud)

(您不需要ELSE此处,因为与 不同SUMCOUNT忽略NULL。)

我将值更新1为字符串以证明这与布尔值无关。