OracleSQL如何将两条指定记录求和合并为新记录展示
现有语句的问题
- 逻辑判断错误:
CASE WHEN bu='IT' and bu='InfoSec'永远不成立,单条记录的bu字段不可能同时等于两个不同值,应该用IN或者OR做包含判断。 - 缺少聚合逻辑:单纯做字段映射不会自动合并行,需要搭配
GROUP BY分组和SUM聚合函数对数值字段求和。 - 未处理
flag字段:合并后的记录flag为2,需要先把IT记录的flag从3统一映射为2,才能分到同一组。
调整后的SQL语句
WITH bc AS ( SELECT date, -- 统一需要合并记录的flag值 CASE WHEN bu IN ('InfoSec', 'IT') THEN 2 ELSE flag END AS flag, -- 统一合并后的bu名称 CASE WHEN bu IN ('InfoSec', 'IT') THEN 'InformationTechnology' ELSE bu END AS bu, volume, calls FROM table1 ) SELECT date, flag, bu, SUM(volume) AS volume, SUM(calls) AS calls FROM bc GROUP BY date, flag, bu ORDER BY flag
逻辑说明
- 先在CTE中将InfoSec和IT两类记录的
flag、bu都映射为相同的值,确保后续分组时这两类会被归为同一组 - 分组后对
volume和calls字段求和,即可得到合并后的累加值 - 最终按
flag排序后和预期输出顺序完全一致
内容的提问来源于stack exchange,提问作者mali_the
相关产品推荐
相关产品推荐

