主从表的BOM怎么用递归实现
主从表的BOM如何用递归实现
环境是SQL2005
表结构
ICBOM表
主键 BOM单据号 产品代码 数量
FInterID FBOMNumber FItemID FQty
ICBOMChild表
主键 明细序号 产品代码 数量
FInterID FEntryID FItemID FQty
t_ICItem表
产品代码 产品名称 产品代码 展开标识为2时展开为1时不展开
FItemID FName FNumber FErpClsID
是多级BOM
请问如何用Cte来实现?
------解决方案--------------------
环境是SQL2005
表结构
ICBOM表
主键 BOM单据号 产品代码 数量
FInterID FBOMNumber FItemID FQty
ICBOMChild表
主键 明细序号 产品代码 数量
FInterID FEntryID FItemID FQty
t_ICItem表
产品代码 产品名称 产品代码 展开标识为2时展开为1时不展开
FItemID FName FNumber FErpClsID
是多级BOM
请问如何用Cte来实现?
------解决方案--------------------
DECLARE @TopLevel varchar(10) = '1' -- 主階試試看,沒數據沒有測試
,@NumLevels INT = 3; -- 深度
WITH bomhd as(
select c.FItemID as partno , IC.FItemID as itemno from ICBOMChild as c inner join ICBOM as IC on c.FInterID = IC.FInterID
)
,bmx AS
(
-- rCTE anchor: retrieve the top level node
SELECT [Level]=1, itemno, partno
FROM bomhd
WHERE itemno = @TopLevel
UNION ALL
-- rCTE recursion: retrieve the following nodes
SELECT [Level]+1, a.itemno, a.partno
FROM bomhd a
JOIN bmx b ON b.partno = a.itemno
WHERE [Level] < @NumLevels --+ 1
)
select * from bmx order by [level]