如何将SQL中同ID不同SUBID的结果合并到同一行
解决方案
你可以通过窗口函数+自连接的方式将成对的D、X行合并,提取所需字段并整理格式,具体实现如下:
核心思路
- 给原始结果集中的每一行按
ID和SUBID分组编号,确保同一组的D、X行拥有相同的序号; - 通过
ID和序号将D行与X行关联,提取X的Volume、D的Gross和Net,并将SUBID固定为X。
SQL代码实现
假设你的原始查询结果存储在临时数据集temp_data中(也可以直接将原查询替换到CTE语句里):
WITH numbered_data AS ( SELECT ID, SUBID, Volume, Gross, Net, -- 给每个ID下的D/X分别编号,确保对应行序号一致 ROW_NUMBER() OVER (PARTITION BY ID, SUBID ORDER BY Gross NULLS LAST) AS row_num FROM temp_data ) SELECT d.ID, 'X' AS SUBID, x.Volume, d.Gross, d.Net FROM numbered_data d INNER JOIN numbered_data x ON d.ID = x.ID AND d.row_num = x.row_num WHERE d.SUBID = 'D' AND x.SUBID = 'X' ORDER BY d.ID, d.row_num;
逻辑说明
- 窗口函数
ROW_NUMBER()会给每个ID下的SUBID='D'行按Gross排序编号,同时给SUBID='X'行按规则同步编号,让每一对对应的D、X行拥有相同的row_num; - 自连接后,将X行的
Volume与D行的Gross、Net拼接,最终得到目标格式的结果。
内容的提问来源于stack exchange,提问作者Mindbender
相关产品推荐
相关产品推荐

