SQL CASE语句中重复使用列值实现多分组求和的问题
解决方案
你的问题核心在于:同一个部门(SALES)需要同时计入两个分组的总和,但普通CASE语句是按顺序匹配,每条记录只会被分配到一个分组,无法满足重复统计的需求。另外你的原CASE语句还有语法错误(字符串引号未闭合:'FINANCE, 应该是 'FINANCE','DATA, 应该是 'DATA')。
要实现需求,需要用条件聚合+UNION ALL的方式,针对每个分组单独计算总和,具体SQL如下:
SELECT ID, PROCESS, 'NONEXEMPT' AS DEPT_2, SUM(CASE WHEN DEPT IN ('SALES', 'HR') THEN SECONDS ELSE 0 END) AS SECONDS FROM your_table_name GROUP BY ID, PROCESS UNION ALL SELECT ID, PROCESS, 'EXEMPT' AS DEPT_2, SUM(CASE WHEN DEPT IN ('FIN', 'SALES', 'DATA', 'ITA') THEN SECONDS ELSE 0 END) AS SECONDS FROM your_table_name GROUP BY ID, PROCESS UNION ALL SELECT ID, PROCESS, 'OTHERS' AS DEPT_2, SUM(CASE WHEN DEPT NOT IN ('SALES', 'HR', 'FIN', 'DATA', 'ITA') THEN SECONDS ELSE 0 END) AS SECONDS FROM your_table_name GROUP BY ID, PROCESS
代码说明
- 每个SELECT块单独计算一个分组的总和:
- 第一个块统计
NONEXEMPT:只累加SALES和HR的SECONDS - 第二个块统计
EXEMPT:累加FIN、SALES、DATA、ITA的SECONDS - 第三个块统计
OTHERS:累加不在上述部门列表中的SECONDS
- 第一个块统计
- 用
UNION ALL将三个分组的结果合并,得到你需要的输出格式。 - 注意替换
your_table_name为你实际的表/视图名称。
验证结果
代入你的数据计算:
- NONEXEMPT:24268 + 77 = 24345
- EXEMPT:14995 + 24268 + 739 + 8988 = 48990
- OTHERS:2992
完全符合你给出的目标结果。
内容的提问来源于stack exchange,提问作者moikoi
相关产品推荐
相关产品推荐

