是这样的:现在BOM 的结构为三个字段 Parent Item No.,Item No.,Qty,分别表示母件的编号,子件的编号,一个母件占用子件的数量,我现在想实现一个功能:假设有三个个子件A,B,C,我想实现的算法是:所有的母件里面,含有1个A,2个B,3个C的所有的母件的物料编号------------------------------------我现在的做法是,首先查找含有1个A的所有的母件编号,然后扔进一个临时表,然后再从临时表里面从头到尾过滤,看看,哪个没有含有2个B,如果没有含有2个B的,就从临时表里面删除,这样,临时表剩下的数据,再过滤,看看,有没有含有3个C的....,照此类推.
这样,临时表里面剩下的数据,肯定就是满足所有条件的,但是不知道有没有更好的算法,欢迎大家讨论!
这样,临时表里面剩下的数据,肯定就是满足所有条件的,但是不知道有没有更好的算法,欢迎大家讨论!
CREATE function dbo.aa(@ITEM_CODE VARCHAR(20))
returns @table table(PARENT VARCHAR(20),ITEM_CODE VARCHAR(20),SHW_QTY DECIMAL(10,2),LOSS_QTY DECIMAL(10,4),BOM_UNIT VARCHAR(10),level int)
AS
BEGIN
declare @level int
set @level=1
insert INTO @table
SELECT PARENT,ITEM_CODE,SHW_QTY,QTY_W_LOSS*(1+P_LOSS/100),BOM_UNIT,@level
FROM BOM1 WHERE PARENT=@ITEM_CODE COLLATE Latin1_General_BIN
WHILE @@rowcount>0
BEGIN
set @level=@level+1
insert into @table
SELECT A.PARENT,A.ITEM_CODE,A.SHW_QTY*B.SHW_QTY,A.QTY_W_LOSS*(1+A.P_LOSS/100)*B.SHW_QTY,A.BOM_UNIT ,@level
FROM BOM1 A,@table B WHERE A.PARENT=B.ITEM_CODE COLLATE Latin1_General_BIN
and B.level=@level-1
END
return
END
這是我在我們公司寫的BOM核算代碼,這是順推,反推也一樣的
select * into #
from dbo.aa('0')select PARENT
from # a
where ITEM_CODE='A' and SHW_QTY =1
and exists (
select 1 from # where ITEM_CODE='B' and SHW_QTY =2
and PARENT=a.PARENT
)
and exists (
select 1 from # where ITEM_CODE='C' and SHW_QTY =3
and PARENT=a.PARENT
)