一个 table 上的 DB2 CTE 递归,6 级

DB2 CTE Recursion on one table, 6 levels

我必须在 db2 table 上编写递归,它的列值中包含 parent/child 关系。这是一个糟糕的设计,但不幸的是我无法控制它。这是来自 SalesForce 的数据转储。

转储中的每条记录 table 代表一个级别的产品代码分组。从顶层 Indutstrial、AG、OIL 等开始,每个组都有带组代码的子组,直到到达包含实际产品代码的底层。 鉴于产品代码 (STCC_RECORD_ID),我需要检索顶级父级的 GROUP_CODE。我被困住了,任何见解将不胜感激。这是我的最新版本 SQL:

WITH X(ID,STCC_RECORD_ID,PARENT_ID,GROUP_CODE,SEG_NAME) AS 
(
SELECT P.ID,P.STCC_RECORD_ID,P.PARENT_ID,P.GROUP_CODE,P.SEG_NAME
        FROM HB_EXTRACT.SEGMENTATION P
        WHERE STCC_RECORD_ID='0113211' 
UNION ALL
SELECT ID,STCC_RECORD_ID,PARENT_ID,GROUP_CODE,SEG_NAME
        FROM x
        WHERE x.PARENT_ID = ID
) 
SELECT * FROM X

这是它的输出。只有底部记录显示:

这是期望的输出:

据我了解,您必须使用自下而上的方法。

WITH X(ID,STCC_RECORD_ID,PARENT_ID,GROUP_CODE,SEG_NAME, Level) AS 
(
SELECT P.ID,P.STCC_RECORD_ID,P.PARENT_ID,P.GROUP_CODE,P.SEG_NAME, 0
        FROM HB_EXTRACT.SEGMENTATION P
        WHERE STCC_RECORD_ID='0113211' 
UNION ALL
SELECT P.ID,P.STCC_RECORD_ID,P.PARENT_ID,P.GROUP_CODE,P.SEG_NAME, Level+1
        FROM x, HB_EXTRACT.SEGMENTATION P
        WHERE x.STCC_RECORD_ID=P.PARENT_ID
        AND Level<7
) 
SELECT * FROM X
WHERE Level>4

在每次迭代中,您都会根据当前记录加入下一级(父级)。级别列用于稍后 select table X.

的特定层