长SQL查询GROUP BY问题:保留CASE WHEN条件求总合
SQL求和需求优化
原SQL因CASE WHEN中使用了A.COD和A.DES字段,被迫在GROUP BY中加入这两个字段,原代码如下:
SELECT CASE WHEN A.COD IN ('A','B') THEN 5 WHEN A.DES IN ('D','E') THEN 5 END UNIVERSO, SUM(UNIVERSO) FROM TABLEX GROUP BY A.COD, A.DES
(注:原SQL存在语法问题,已调整字段顺序以确保语法正确)
当前执行后返回分组明细结果(隐式显示COD、DES字段):
UNIVERSO [ COD DES 5 A D 5 B E 100 C M ]
需求:保留CASE WHEN的判断逻辑,但不需要分组明细行,仅需所有结果的总和,期望输出:
UNIVERSO 110
不愿使用外层GROUP BY或临时表(原查询过长,实现复杂),寻求替代方案。
解决方法
直接将CASE WHEN逻辑嵌套到SUM函数内部,无需分组即可计算总合:
SELECT SUM( CASE WHEN A.COD IN ('A','B') THEN 5 WHEN A.DES IN ('D','E') THEN 5 ELSE UNIVERSO -- 对应不满足条件时取原UNIVERSO值 END ) AS UNIVERSO FROM TABLEX
逻辑说明:
- 满足
COD IN ('A','B')或DES IN ('D','E')的行,按规则取值5 - 不满足条件的行,保留原
UNIVERSO的值 - 通过外层
SUM直接计算所有行的结果总和,无需分组操作
内容的提问来源于stack exchange,提问作者SmackCat
相关产品推荐
相关产品推荐

