要改为这样,
父项:A
子项:B 数量:2
子项:C 数量:2
在原有算法的基础上加一列,用父项的数量乘以子项的数量就行了,根本不要这个的啊
CREATE FUNCTION F_GETBOM1(@PARENT NVARCHAR(10))
RETURNS @BOM TABLE (PARENT NVARCHAR(10),
P_ITEM_DESC NVARCHAR(60),
COM_LEVEL INT,
SORT_COLUMN NVARCHAR(20),
C_LEVEL NVARCHAR(20),
COMPONENT NVARCHAR(10),
CITEM_DESC NVARCHAR(60),
COM_TYP NVARCHAR(10),
QUANTITY NUMERIC(10,6),
SCRAP_PCNT NUMERIC(10,6),
MB NVARCHAR(10),
Coefficient NUMERIC(10,6))
WITH ENCRYPTION
AS
BEGIN
DECLARE @LEVEL INT
SET @LEVEL=1
INSERT @BOM(PARENT,COM_LEVEL,SORT_COLUMN,C_LEVEL,COMPONENT,CITEM_DESC,COM_TYP,QUANTITY,SCRAP_PCNT,MB,Coefficient)
select Parent,@LEVEL,
CASE WHEN SEQN>90 THEN CAST(SEQN/10 AS NVARCHAR(10)) ELSE '0'+CAST(SEQN/10 AS NVARCHAR(10)) END,
CAST(SEQN/10 AS NVARCHAR(10)),
component,C.item_desc1,
COM_TYP,
quantity,scrap_pcnt,
MATERIAL_DTL2.MB,1*quantity
from material_bill join material_mst AS C on material_bill.component=C.item
JOIN MATERIAL_DTL2 ON COMPONENT=MATERIAL_DTL2.ITEM
WHERE MATERIAL_BILL.PARENT=@PARENT
WHILE @@ROWCOUNT>0
BEGIN
SET @LEVEL=@LEVEL+1
INSERT @BOM(PARENT,COM_LEVEL,SORT_COLUMN,C_LEVEL,COMPONENT,CITEM_DESC,COM_TYP,QUANTITY,SCRAP_PCNT,MB,Coefficient)
SELECT A.PARENT,@LEVEL,
B.SORT_COLUMN+'.'+CASE WHEN A.SEQN>90 THEN CAST(A.SEQN/10 AS NVARCHAR(10)) ELSE '0'+CAST(A.SEQN/10 AS NVARCHAR(10)) END,
B.C_LEVEL+'.'+CAST(SEQN/10 AS NVARCHAR(10)),
A.COMPONENT,C.ITEM_DESC1,
A.COM_TYP,
A.QUANTITY,B.SCRAP_PCNT,
D.MB,Coefficient*A.QUANTITY
FROM MATERIAL_BILL AS A JOIN @BOM AS B ON A.PARENT=B.COMPONENT
JOIN MATERIAL_MST AS C ON A.COMPONENT=C.ITEM
LEFT OUTER JOIN MATERIAL_DTL2 AS D ON A.COMPONENT=D.ITEM
WHERE B.COM_LEVEL=@LEVEL-1
END
RETURN
END