2017-10-12 20 views
2

私は部品表をプリントアウトするために作成した再帰的なCTEを持っています。このCTEはその目的のためにうまくいきますが、私が追加したいのは、すべてのアイテムがトップレベルの親を示す別の列です。ここで再帰的なCTE取得全部の反復からの親

は私の現在の結果は以下のとおりです。

ITEM    COMPONENT  LEVEL 
2326123679   216501   1 
2326123679   80015008  1 
216501    10006   2 
216501    13004   2 
216501    21010   2 

私はCTEから出力したいのですがどのようなものです:これは再帰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 

ですか?基本的に私は出力したい:

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

@マット問題なし、うれしい – Lamak

関連する問題