通过递归 CTE 分解 BOM

Posted

技术标签:

【中文标题】通过递归 CTE 分解 BOM【英文标题】:Exploding BOM through recursive CTE 【发布时间】:2013-12-01 23:56:24 【问题描述】:

我正在尝试,但我仍然只获得锚行。但是,我正在尝试使用此 SQL 代码:

With BOMTree_CTE

AS

(

--Anchor

Select 

B.BOMID

,B.ITEMID 

,B.LINENUM

,B.position

,B.BOMQTY

,B.INVENTDIMID

,0 as 'CurrentLevel'

,BV.BOMID as BVBomId

,BV.ITEMID 

FROM BOM B Left Join BomVersion BV On B.ItemID = BV.ItemId



Union All

Select 

BB.BOMID

,BB.ITEMID

,BB.LINENUM

,BB.position

,BB.BOMQTY

,BB.INVENTDIMID

,CurrentLevel+1

,CAST('1' as nvarchar(20)) 

,CAST('2' as nvarchar(20))

From Bom BB  Join BOMTree_CTE C On BB.BOMID = C.BVBomId

)

select * from BOMTree_CTE C 

我不想通过 X++ 做,我需要通过 SQL!

非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

嗯,显然我找到了,只是使用了一个存储过程,并将 BOMId 参数传递给了 Anchor CTE 的 where 语句。

【讨论】:

【参考方案2】:

您正在使用Common Table Expressoins。

您缺少的一件事是使用 DataAreaId 和 PartitionId(如果使用 AX 2012 R2)。 查看定义的索引。

【讨论】:

我正在尝试这样做...但是我找不到完整的示例。

以上是关于通过递归 CTE 分解 BOM的主要内容,如果未能解决你的问题,请参考以下文章

数据结构——递归

数据结构-- 递归 排序

递归分解因数

使用递归子查询分解进行循环检测

递归--练习5--noi1751分解因数

递归 SQL:使用递归子查询分解的聚合函数