BOM sql server
时间: 2023-09-28 17:03:42 浏览: 100
U8 BOM全阶查询 sql
4星 · 用户满意度95%
BOM 表示 Bill of Materials,即物料清单。在 SQL Server 中,可以使用递归查询实现 BOM 展开。
假设有如下的物料清单表:
```
CREATE TABLE [dbo].[BOM](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ParentID] [int] NULL,
[ComponentID] [int] NULL,
[Quantity] [int] NULL,
CONSTRAINT [PK_BOM] PRIMARY KEY CLUSTERED
(
[ID] ASC
))
INSERT INTO BOM(ParentID, ComponentID, Quantity) VALUES(NULL, 1, 1)
INSERT INTO BOM(ParentID, ComponentID, Quantity) VALUES(1, 2, 2)
INSERT INTO BOM(ParentID, ComponentID, Quantity) VALUES(1, 3, 1)
INSERT INTO BOM(ParentID, ComponentID, Quantity) VALUES(2, 4, 1)
INSERT INTO BOM(ParentID, ComponentID, Quantity) VALUES(2, 5, 2)
INSERT INTO BOM(ParentID, ComponentID, Quantity) VALUES(3, 6, 1)
INSERT INTO BOM(ParentID, ComponentID, Quantity) VALUES(4, 7, 1)
INSERT INTO BOM(ParentID, ComponentID, Quantity) VALUES(5, 8, 1)
INSERT INTO BOM(ParentID, ComponentID, Quantity) VALUES(5, 9, 2)
```
其中,ParentID 表示父节点的 ID,ComponentID 表示子节点的 ID,Quantity 表示子节点的数量。
现在,需要展开编号为 1 的物料清单,输出所有子节点的信息,可以使用如下的递归查询:
```
WITH BOMHierarchy AS (
SELECT ID, ParentID, ComponentID, Quantity
FROM BOM WHERE ID = 1
UNION ALL
SELECT BOM.ID, BOM.ParentID, BOM.ComponentID, BOM.Quantity
FROM BOMHierarchy
JOIN BOM ON BOMHierarchy.ComponentID = BOM.ParentID
)
SELECT ComponentID, Quantity
FROM BOMHierarchy WHERE ID <> 1
```
执行以上查询语句,即可得到编号为 1 的物料清单的展开结果。
阅读全文