这是在SQL Server 2008中。
我计划创建两个表来表示物料清单。Item Master将包含如下数据:-
ID项目描述
1- A001 -部件1
2- B001 -子程序集1(程序集1的子项)
3- B002 -子程序集2(程序集1的子项)
4-C001-组件1(子组件1的子项)
5-C002-组件2(子组件2的子项)
BOM关系表将包含如下数据。父项ID和子项ID是项主文件的外键。:-
ID子项ID
1-1-2
2-1-3
3-2-4
4-3-5
因此,第一个表只包含项本身,而另一个表具有关于哪个父ID具有哪个子项的关系。
假设程序集(A001)可能需要根据添加到上述表中的数据进行递归迭代,那么获取所有子项的SQL应该是什么呢?
因此,对于上面的数据,我应该得到如下输出:
1) A001
1.1) B001
1.1.1)C001
1.2) B002
1.2.1) C002 谢谢,Chak。
发布于 2010-09-11 02:04:02
使用recursive 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; 发布于 2010-09-11 01:54:41
您需要使用recursive common table expression对当前结构执行此操作。
SQL Server2008中还有一种hierarchyid类型,可以让事情变得更简单。
https://stackoverflow.com/questions/3686935
复制相似问题