Oracle中按CODE1/CODE2/CODE3分组添加QTY求和列的实现方法
解决Oracle查询中添加分组SUM列的问题
嘿,我来帮你搞定这个需求!你之前尝试的CASE语句之所以没达到预期效果,是因为TBL.CODE1=TBL.CODE1这类条件永远为真——你拿当前行的字段和它自己比,结果肯定都是true,所以这个CASE其实等价于直接SUM(TBL.QTY),得到的是全表QTY的总和,而不是按CODE1、CODE2、CODE3分组的总和。
正确的实现方式:使用窗口函数
要在保留原有所有行的前提下,计算CODE1、CODE2、CODE3相同的行的QTY总和,Oracle的窗口函数SUM() OVER (PARTITION BY ...)是完美的解决方案。它可以在不改变原有查询行结构的基础上,对指定分组内的数据进行聚合计算。
下面是修改后的完整查询语句:
SELECT TBL.ID, TBL.CODE1, TBL.CODE2, TBL.CODE3, TBL.CODE4, TBL.QTY, -- 按CODE1、CODE2、CODE3分组计算QTY总和 SUM(TBL.QTY) OVER (PARTITION BY TBL.CODE1, TBL.CODE2, TBL.CODE3) AS SUM_QTY FROM DB.TBL TBL GROUP BY TBL.ID, TBL.CODE1, TBL.CODE2, TBL.CODE3, TBL.CODE4, TBL.QTY
效果说明
这个查询会为每一行生成对应的SUM_QTY列:
- ID=1和ID=3的CODE1/CODE2/CODE3都是
H1/G2/R3,所以它们的SUM_QTY是5+8=13 - ID=2和ID=5的CODE1/CODE2/CODE3都是
F1/E2/J3,所以它们的SUM_QTY是2+1=3 - ID=4的CODE1/CODE2/CODE3是唯一的,所以
SUM_QTY就是它自己的QTY值6
完全匹配你期望的结果!
内容的提问来源于stack exchange,提问作者user7393973
相关产品推荐
相关产品推荐

