SQL查询如何将同订单行关联的PNP、HAN费用合并为单行输出
解决方案
实现逻辑
- 当前查询返回多行的核心原因是OOLICH表中该订单行匹配到了PNP、HAN两条费用记录,原有CASE判断逻辑会为每条费用生成独立行
- 合并为单行只需要按所有公共字段分组,对费用类字段做聚合运算即可:由于原有CASE逻辑中不符合费用类型的取值为0,使用SUM()聚合后刚好可以得到对应费用的实际值
修改后SQL语句
SELECT OBORNO, OBPONR, OBITNO, OBHDPR, OBSAPR, SUM(CASE WHEN O7CRID = 'PNP' THEN OBORQA * O7CRAM ELSE 0 END) AS PNP_CHARGE_AMT, SUM(CASE WHEN O7CRID = 'HAN' THEN OBORQA * O7CRAM ELSE 0 END) AS HAN_CHARGE_AMT, SUM(CASE WHEN O7CRID = 'PNP' THEN (OBORQA * O7CRAM) + OBSAPR ELSE 0 END) AS FINAL_SLS_PRC FROM [MVXJDTA].[OOLINE] LEFT JOIN [MVXJDTA].[OOLICH] ON O7CONO = OBCONO AND O7ORNO = OBORNO AND O7PONR = OBPONR WHERE OBCONO = '610' AND OBORNO = '2000000096' GROUP BY OBORNO, OBPONR, OBITNO, OBHDPR, OBSAPR
补充说明
如果实际场景中同一个费用类型可能有多条记录,SUM聚合也可以自动叠加总费用,不需要额外调整逻辑。如果确认每个类型只有一条记录,用MAX()替换SUM()也可以得到相同结果。
内容的提问来源于stack exchange,提问作者KCS
相关产品推荐
相关产品推荐

