Oracle SQL如何按LOB字段分组合并表数据生成cnt和failed_cnt列
问题原因
你当前编写的SQL仅对每行原始数据单独做字段值转换,没有按lob字段做分组聚合操作,因此每个lob对应的多条原始记录都会独立输出一行,最终出现重复的lob记录。
修正后的SQL代码
SELECT lob, SUM(CASE WHEN `desc` NOT LIKE 'Failed%' THEN cnt ELSE 0 END) AS cnt, SUM(CASE WHEN `desc` LIKE 'Failed%' THEN cnt ELSE 0 END) AS failed_cnt FROM table1 GROUP BY lob
逻辑说明
- 通过
GROUP BY lob将同一个业务线(lob)的所有记录合并为一行,消除重复的lob记录 - 将条件判断逻辑嵌套在
SUM聚合函数中,对同一lob下符合条件的cnt值求和,无符合条件的记录时默认返回0,完全匹配需求 - 注意
desc是SQL的保留关键字,用反引号包裹可以避免语法报错
内容的提问来源于stack exchange,提问作者mali_the
相关产品推荐
相关产品推荐

