我有一个递归的CTE,我打印出一份物料清单。此CTE适用于此目的,但我想添加的是所有项目的另一列,以显示顶级父级。
以下是我目前的结果:
ITEM COMPONENT LEVEL
2326123679 216501 1
2326123679 80015008 1
216501 10006 2
216501 13004 2
216501 21010 2
我想从CTE输出的内容是:
PARENT ITEM COMPONENT LEVEL
2326123679 2326123679 216501 1
2326123679 2326123679 80015008 1
2326123679 216501 10006 2
2326123679 216501 13004 2
2326123679 216501 21010 2
这是否可能使用递归CTE?基本上我想输出:
MAX(ITEM)
在每次完整的迭代中。
CTE:
WITH ReturnBOM ([Item], [Item Name], [Component], Level)
AS
(
SELECT
FinishedLevel.PMPRNO AS [Item],
MasterItem.MMITDS AS [Item Name],
FinishedLevel.PMMTNO AS [Component],
1 AS Level
FROM M3FDBPRD.MVXJDTA.MPDMAT FinishedLevel
JOIN M3FDBPRD.MVXJDTA.MITMAS MasterItem
ON FinishedLevel.PMPRNO = MasterItem.MMITNO
WHERE MasterItem.MMITTY = 'Z10'
UNION ALL
SELECT
FinishedLevel.PMPRNO AS [Item],
MasterItem.MMITDS AS [Item Name],
FinishedLevel.PMMTNO AS [Component],
Level + 1
FROM M3FDBPRD.MVXJDTA.MPDMAT FinishedLevel
INNER JOIN ReturnBOM ItemRecursion
ON ItemRecursion.[Component] = FinishedLevel.PMPRNO
JOIN M3FDBPRD.MVXJDTA.MITMAS MasterItem
ON FinishedLevel.PMPRNO = MasterItem.MMITNO
)
SELECT
ReturnBOM.Item,
ReturnBOM.[Item Name],
ReturnBOM.Component,
ReturnBOM.Level
FROM ReturnBOM
答案 0 :(得分:2)
没有数据来测试这个,我认为这应该非常简单:
WITH ReturnBOM (Parent, [Item], [Item Name], [Component], Level)
AS
(
SELECT
FinishedLevel.PMPRNO AS [Parent],
FinishedLevel.PMPRNO AS [Item],
MasterItem.MMITDS AS [Item Name],
FinishedLevel.PMMTNO AS [Component],
1 AS Level
FROM M3FDBPRD.MVXJDTA.MPDMAT FinishedLevel
JOIN M3FDBPRD.MVXJDTA.MITMAS MasterItem
ON FinishedLevel.PMPRNO = MasterItem.MMITNO
WHERE MasterItem.MMITTY = 'Z10'
UNION ALL
SELECT
ItemRecursion.Parent,
FinishedLevel.PMPRNO AS [Item],
MasterItem.MMITDS AS [Item Name],
FinishedLevel.PMMTNO AS [Component],
Level + 1
FROM M3FDBPRD.MVXJDTA.MPDMAT FinishedLevel
INNER JOIN ReturnBOM ItemRecursion
ON ItemRecursion.[Component] = FinishedLevel.PMPRNO
JOIN M3FDBPRD.MVXJDTA.MITMAS MasterItem
ON FinishedLevel.PMPRNO = MasterItem.MMITNO
)
SELECT
ReturnBOM.Parent,
ReturnBOM.Item,
ReturnBOM.[Item Name],
ReturnBOM.Component,
ReturnBOM.Level
FROM ReturnBOM;