一尘不染

我如何从物料清单表中获取递归数据

sql

这是在SQL Server 2008中。

我计划创建两个表来代表物料清单。项目负责人将具有以下数据:

[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] [子项ID]

1 ---- 1 ---- 2
2 ---- 1 ---- 3
3 ---- 2 ---- 4
4 ---- 3 ---- 5

因此,第一个表仅包含项目本身,而另一个表在哪个父ID和哪个子ID方面具有关系。

考虑到它可能不得不根据添加到上述表中的数据进行递归迭代的事实,提取​​Assembly(A001)的所有子项的SQL可能是什么?

因此,对于以上数据,我应获得如下输出:-

1)A001

                1.1) B001       
                               1.1.1)C001      
                1.2) B002         
                               1.2.1) C002

谢谢,泽


阅读 175

收藏
2021-05-30

共1个答案

一尘不染

使用递归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;
2021-05-30