You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

代码说明

  1. 每个SELECT块单独计算一个分组的总和:
    • 第一个块统计NONEXEMPT:只累加SALES和HR的SECONDS
    • 第二个块统计EXEMPT:累加FIN、SALES、DATA、ITA的SECONDS
    • 第三个块统计OTHERS:累加不在上述部门列表中的SECONDS
  2. 用UNION ALL将三个分组的结果合并,得到你需要的输出格式。
  3. 注意替换your_table_name为你实际的表/视图名称。

验证结果

代入你的数据计算:

  • NONEXEMPT:24268 + 77 = 24345
  • EXEMPT:14995 + 24268 + 739 + 8988 = 48990
  • OTHERS:2992
    完全符合你给出的目标结果。

内容的提问来源于stack exchange,提问作者moikoi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 00:45:13