DB2SQL查询以组合多个子行以在单行中显示 我正在尝试构建查询。我有一个父表,每个帐户都有唯一的行。子表将对父表上的每一行有多个行。子桌和父桌...

问题描述 投票:0回答:1

ROW_ID CRD_DB_YN AMT CODE 1234563 D 100 A 1234563 D 200 C 1234563 C 300 D 1234564 D 100 X 1234565 D 250 A 1234565 C 300 C

我希望从下面的查询中输出输出。

ROW_ID ACCT CRD_DB_YN AMT CODE CRD_DB_YN AMT CODE CRD_DB_YN AMT CODE 1234563 333555 D 100 A D 200 C C 300 D 1234564 333666 D 100 X 1234565 333777 D 250 A C 300 C

	

在情况下,您的孩子级别是固定的,您可以首先根据Row_ID对孩子进行排名,然后根据等级对每个等级重复列CRD_DB_YN,AMT和代码。

WITH rank_child AS ( SELECT p.ROW_ID AS P_ROW_ID, p.ACCT, c.ROW_ID AS C_ROW_ID, c.CRD_DB_YN, c.AMT, c.CODE, ROW_NUMBER() OVER (PARTITION BY c.ROW_ID ORDER BY c.ROW_ID) AS rn FROM parent p INNER JOIN child c ON p.ROW_ID = c.ROW_ID ) SELECT rc.P_ROW_ID AS ROW_ID, rc.ACCT, MAX(CASE WHEN rc.rn = 1 THEN rc.CRD_DB_YN END) AS CRD_DB_YN1, MAX(CASE WHEN rc.rn = 1 THEN rc.AMT END) AS AMT1, MAX(CASE WHEN rc.rn = 1 THEN rc.CODE END) AS CODE1, MAX(CASE WHEN rc.rn = 2 THEN rc.CRD_DB_YN END) AS CRD_DB_YN2, MAX(CASE WHEN rc.rn = 2 THEN rc.AMT END) AS AMT2, MAX(CASE WHEN rc.rn = 2 THEN rc.CODE END) AS CODE2, MAX(CASE WHEN rc.rn = 3 THEN rc.CRD_DB_YN END) AS CRD_DB_YN3, MAX(CASE WHEN rc.rn = 3 THEN rc.AMT END) AS AMT3, MAX(CASE WHEN rc.rn = 3 THEN rc.CODE END) AS CODE3 FROM rank_child rc GROUP BY rc.P_ROW_ID, rc.ACCT ORDER BY rc.P_ROW_ID;
输出

Fiddle

sql db2
1个回答
0
投票

row_id
ACCT

CRD_DB_YN1

AMT1

code1
CRD_DB_YN2AMT2code2CRD_DB_YN3AMT3code31234563333555 d200d100X null null null null1234565333777 null null
d 100 a
c c 300 d 1234564 333666 null null
d 250 a c 300 c null
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.