如何在SQL中对多查询结果分组并合并相同ID的数值求和
解决UNION合并后相同ID的Value求和问题
你的问题出在两个核心点:
- 外层查询仅按
id分组,但未对value执行求和聚合操作 - 使用
UNION会自动过滤重复行(但这里同一ID的value数值不同,所以不会被过滤,导致同一ID出现多条记录)
修改方案如下:
- 将
UNION替换为UNION ALL:保留两个子查询返回的所有行,避免丢失需要参与求和的记录 - 外层查询对
v.value使用SUM()聚合函数,配合GROUP BY v.id实现同一ID下所有value的求和
修改后的完整SQL脚本:
select v.id, sum(v.value) as total_value from ( SELECT h.slxact# as id, (sum(nvl(d.DSCNT_AMT,0)) + sum(nvl(d.PYMT_AMT,0))) as value FROM pymnt d, invoice h WHERE d.slxact# = h.slxact# and d.branch_cd = h.branch_cd group by h.slxact# UNION ALL SELECT h.slxact# as id, sum(nvl(d.PYMT_AMT,0)) as value FROM retn d, invoice h WHERE d.slxact# = h.slxact# and d.branch_cd = h.branch_cd group by h.slxact# ) as v group by v.id
执行后,ID为1的记录会合并为一行,total_value为11;ID为2的total_value保持7不变,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Hbk88
相关产品推荐
相关产品推荐

