SQL中SUM结合CASE WHEN多OR不等于条件执行结果异常求助
问题原因
你编写的SQL存在布尔运算逻辑错误:
- 用
OR连接多个不等于判断时,对任意给定的ReworkCode.CodeNum值,必然满足至少一个不等于条件:例如值为4时,会满足!=5、!=6、!=7的判断,因此整个CASE WHEN的判断结果永远为真,最终统计结果等于表的总行数,完全不符合你预期的「排除4/5/6/7这几个值统计」的需求。
解决方法
有两种写法可实现你要的统计逻辑:
- 将
OR替换为AND
SUM(CASE WHEN ReworkCode.CodeNum != 4 AND ReworkCode.CodeNum != 5 AND ReworkCode.CodeNum != 6 AND ReworkCode.CodeNum != 7 THEN 1 ELSE 0 END) AS NumberRejectedByOther
- 使用更简洁的
NOT IN语法,可读性更高
SUM(CASE WHEN ReworkCode.CodeNum NOT IN (4,5,6,7) THEN 1 ELSE 0 END) AS NumberRejectedByOther
内容的提问来源于stack exchange,提问作者Sbleezy
相关产品推荐
相关产品推荐

