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
row_idACCT
CRD_DB_YN1code1
d | 100 | a | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
c | c | 300 | d | 1234564 | 333666 | null | null | |||
d | 250 | a | c | 300 | c | null | ||||