2017-10-12 148 views
2

我有一个递归CTE,用于打印出物料清单。这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 

回答

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; 
+0

完蛋了!哇,这么简单,我想不起来,我试图把一个新的父母放在锚件上,但底部需要匹配,我没有考虑只输出顶部。谢谢! – Matt

+0

@Matt没问题,很高兴它的工作 – Lamak