在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有着不錯的表示。