一张表,6个级别的DB2 CTE递归

时间:2018-11-20 18:26:44

标签: sql recursion db2 common-table-expression

我必须在db2表中写一个递归,该表在其列值中包含一个父/子关系。这是一个糟糕的设计,但不幸的是我对此无法控制。这是来自SalesForce的数据转储。

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

Yarn top

这里是输出。仅底部记录显示: enter image description here

这是所需的输出: enter image description here

1 个答案:

答案 0 :(得分:2)

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

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

在每次迭代中,您将基于当前记录加入下一级(父级)。级别列用于以后选择表X的特定层。