一段展开BOM尾阶用料清单与用量合计的算法。

一段展开BOM尾阶用料清单与用量合计的算法。

Create Table #tmp(SubCode Nvarchar(50),ParentCode Nvarchar(50),Qty Numeric(18,6))

Insert Into #tmp(SubCode,ParentCode,Qty)
select 'S1','P1',1
Insert Into #tmp(SubCode,ParentCode,Qty)
select 'S2','P1',2
Insert Into #tmp(SubCode,ParentCode,Qty)
select 'SU1','S1',1
Insert Into #tmp(SubCode,ParentCode,Qty)
select 'SU2','S1',1
Insert Into #tmp(SubCode,ParentCode,Qty)
select 'SU1','S2',1
Insert Into #tmp(SubCode,ParentCode,Qty)
select 'SU2','S2',2

Insert Into #tmp(SubCode,ParentCode,Qty)
select 'S1','P2',1
Insert Into #tmp(SubCode,ParentCode,Qty)
select 'S2','P2',2


Create Table #tmp2(HParentCode Nvarchar(50),ParentCode Nvarchar(50),SubCode NVarchar(50),
Qty Numeric(18,6),LevelNum int,AutoID Int IDENTITY(1,1))
Insert Into #tmp2(HParentCode,ParentCode,SubCode,Qty,LevelNum)
Select distinct ParentCode,ParentCode,ParentCode,1,0
From #tmp

Declare @LevelNum int
Set @LevelNum=0
While Exists(select 1 from #tmp2 A Inner join #tmp B on A.SubCode=B.ParentCode   Where LevelNum=@LevelNum)
Begin
  SET @LevelNum=@LevelNum+1
  Insert Into #tmp2(HParentCode,ParentCode,SubCode,Qty,LevelNum)
  Select A.HParentCode,A.SubCode,B.SubCode,A.Qty*B.Qty,@LevelNum
  from #tmp2 A Inner join #tmp B on A.SubCode=B.ParentCode  Where LevelNum=@LevelNum-1

  --展到100阶时即退出

  If @LevelNum>=101
    Break
End

Delete #tmp2 where SubCode in (select ParentCode From #tmp2)
Delete #tmp2 where HParentCode in (select ParentCode From #tmp2)


Select HParentCode,SubCode,Sum(Qty) as Qty From #tmp2 Group By HParentCode,SubCode Order By HParentCode,SubCode


/*
drop table #tmp2
drop table #tmp
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值