树型递归在BOM中测算可用量的范例

在SqlServer 2005以上提供了With 关键字的递归算法,这种对很多问题提供了较大的方法。在这儿一个单一产品多阶子件现存是否满足投产量要求为例。

BOM结构

BOM用量与相应的现存量

注:qty为用量,Cqty为现存量

根据以上模型,目前投产A产品3个单位,求各层是否符合投产条件,及投产后的余量

WITH CYX AS(
SELECT 1 as lev,P,C,QTY,QTY*3 AS DQTY,CQTY,QTY*3-CQTY AS CY
FROM tempBOM WHERE P='A'
UNION ALL
SELECT cyx.lev+1 as lev,TB.P,TB.C,TB.QTY,CASE WHEN CYX.CY<=0 THEN 0 ELSE TB.QTY*CYX.CY END  AS DQTY,TB.CQTY,
CASE WHEN CYX.CY<=0 THEN 0 ELSE TB.QTY*CYX.CY-TB.CQTY END AS CY
FROM CYX
INNER JOIN TEMPBOM TB ON CYX.C=TB.P
)
SELECT *,case when CY<=0 then 'OK' ELSE 'FALSE' END AS S FROM CYX 
GO

说明:

LEV:BOM层次;P:父项;C:子项;QTY:用量;Dqty:需求量;Cqty:现存量,CY:差异;S:是否符合

这种方式对于多层BOM有着不错的表示。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章