我想通過MS-SQL服務器上的Sage Manufacturing Line 50中的物料清單(BOM)遞歸迭代。Sage生產線50物料清單,SQL遞歸兩個表樹迭代
BOM樹結構包含在兩個表BOMHeader和BOMComponent中。這些鏈接由BOMHeader.ID = BOMComponent.HeaderID。所以通過鏈接這些和查詢特定的BomHeader.BOMReference,我可以得到物料清單的第一層。
發生遞歸是因爲每個BOMComponent本身可以是一個組件,它是StockCode,如果它存在爲BOMHeader.BomReference,則表明它是一個子BOM,並且在BOMComponents表中具有子組件。
我花了大約一個半小時畫一個圖,但我需要10點名譽
WITH BOM_CTE (HID, HRef, HDesc, SC, CDesc, CHID, CQ, SEQ)
AS
(
SELECT H.ID as HID, H.BomReference as HRef, H.Description as HDesc, C.StockCode as SC,C.Description as CDesc,C.HeaderID as CHID,C.Quantity as CQ,1 as SEQ
FROM [GNT\SAGEL50].[sagel50_46387].[dbo].BomHeaders H
JOIN [GNT\SAGEL50].[sagel50_46387].[dbo].BomComponents C
ON H.ID = C.HeaderID
WHERE H.BomReference like 'SA000001%'
UNION ALL
SELECT H.ID as HID, H.BomReference as HRef, H.Description as HDesc, C.StockCode as SC,C.Description as CDesc,C.HeaderID as CHID,C.Quantity as CQ,BC.SEQ+1
FROM [GNT\SAGEL50].[sagel50_46387].[dbo].BomHeaders H
JOIN [GNT\SAGEL50].[sagel50_46387].[dbo].BomComponents C
ON H.ID = C.HeaderID
JOIN BOM_CTE BC
ON HRef = BC.SC
)
Select * From BOM_CTE
上面的代碼只列出了頂級水平,並且不會再罵人,通過看我能不能將它張貼如果從BOMComponents表導出的結果庫存代碼作爲BOMReference(表示它有子組件)出現在BOMHeader表中。
遞歸應該結束時,所有BomComponents必須在BomHeader.BomReference沒有StockCode引用(意思是沒有下級)
我是一個遞歸SQL代碼語句,可以實現兩個鏈接表遞歸查詢樹後。 我看了很多BOM問題,但他們似乎在一張表中,並且還有兩張表CTE,但是我無法理解它,因爲我對SQL相當陌生,尤其是遞歸。
預先感謝任何幫助
亞當
莫非你給我們一個更好的表格結構?也許使用ascii和代碼;然後查詢你想要做什麼?現在這看起來像是一堵文字,很難按照你的需要去做。 –
我已編輯它可以刪除請求 – Adamgsb
遞歸延伸n級還是有限制樹可能「高」? (如果限制合理,您可以對擴展進行硬編碼) - PS是** BOM **應該表示什麼?我一直解析「字節順序標記」。 – 2014-03-07 21:15:01