我想通过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