一个 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.
的特定层
我必须在 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.
的特定层