我必须在db2表中写一个递归,该表在其列值中包含一个父/子关系。这是一个糟糕的设计,但不幸的是我对此无法控制。这是来自SalesForce的数据转储。
转储表中的每个记录代表产品代码分组的级别。从最高级别的Indutstrial,AG,OIL等开始,每个组都有带有组代码的子组,直到达到包含实际产品代码的最底层。 给定产品代码(STCC_RECORD_ID),我需要检索顶级父级的GROUP_CODE。我被困住了,任何见识将不胜感激。这是我最新的SQL版本:
Yarn top
答案 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的特定层。