这是在SQL Server 2008中。
我计划创建两个表来代表物料清单。项目负责人将具有以下数据:
1 ---- A001 ----组装1 2 ---- B001 ----组装1(组装1的孩子) 3 ---- B002 ----组装2(组装1的孩子) 4 ---- C001 ----组件1(子组件1的 子代)5 ---- C002 ----组件2(子组件2的子代)
BOM表关系表将具有以下数据。[父项ID]和[子项ID]是项主文件的外键。:-
1 ---- 1 ---- 2 2 ---- 1 ---- 3 3 ---- 2 ---- 4 4 ---- 3 ---- 5
因此,第一个表仅包含项目本身,而另一个表在哪个父ID和哪个子ID方面具有关系。
考虑到它可能不得不根据添加到上述表中的数据进行递归迭代的事实,提取Assembly(A001)的所有子项的SQL可能是什么?
因此,对于以上数据,我应获得如下输出:-
1.1) B001 1.1.1)C001 1.2) B002 1.2.1) C002
谢谢,泽
使用递归CTE。例如:
WITH BomTree (ID, Level, [Item Code], [Item Description], Depth) AS ( -- Anchor member definition SELECT m.*, 0 AS Depth FROM dbo.Master AS m WHERE m.[ID] = ? UNION ALL -- Recursive member definition SELECT m.*, t.Depth + 1 AS Depth FROM dbo.Master AS m INNER JOIN dbo.BOM AS b ON m.[ID] = b.[Child Item ID] INNER JOIN BomTree AS t ON b.[Parent Item ID] = t.ID ) -- Statement that executes the CTE SELECT * FROM BomTree;