主从表的BOM怎么用递归实现

主从表的BOM如何用递归实现
本帖最后由 asd613613 于 2014-05-29 11:05:00 编辑
环境是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]
 試試看,沒數據沒有測試