Bom中的实体物料与用量

来源:互联网 发布:php的视频教程下载 编辑:程序博客网 时间:2024/04/28 03:35

       在制造业BOM中存在一种“虚拟件”作为供应类型的应用。该部分应用主要用于实际不用于实际出入库的物料,在BOM中为了体现结构或其它应用的需要而设置的一种供应类型。

如下图BOM

根据以上的情况,在实际生产订单或现场实体物料使用的BOM结构如下:

BOM的设计结构如下:

表结构为:

表名:

Bom

字段名称

字段属性

说明

P

Varchar(max)

父项

C

Varchar(max)

子项

Wt

Int

供应类型

Qty

int

用量

创建BOM

ifOBJECT_ID('Bom')is not null

begin

   drop tableBom

end

createtable Bom

(

pvarchar(max),

cvarchar(max),

wtint,

qtyfloat

)

insertinto bom(p,c,wt,qty)values('A','A1',4,2)

insertinto bom(p,c,wt,qty)values('A','A2',4,3)

insertinto bom(p,c,wt,qty)values('A','A3',3,1)

insertinto bom(p,c,wt,qty)values('A1','A11',3,2)

insertinto bom(p,c,wt,qty)values('A1','A12',3,3)

insertinto bom(p,c,wt,qty)values('A1','A13',3,1)

insertinto bom(p,c,wt,qty)values('A2','A21',4,2)

insertinto bom(p,c,wt,qty)values('A2','A22',3,3)

insertinto bom(p,c,wt,qty)values('A2','A23',3,1)

insertinto bom(p,c,wt,qty)values('A21','A211',3,2)

insertinto bom(p,c,wt,qty)values('A21','A212',3,4)

拟算角本

IFOBJECT_ID('TEMPDB..#BOM')IS NOT NULL

BEGIN

   DROP TABLE#BOM

END

SELECTP,C,wt,qty,0AS L INTO #BOM FROMBOM WHERE 1=0AND  P='A'

INSERTINTO #BOM SELECTP,C,WT,QTY,1 AS L FROM BOMWHERE P='A'

DECLARE@ID INT

SELECT@ID=COUNT(DISTINCT WT)FROM #BOM WHERE L IN(SELECTMAX(L)AS L FROM #BOM )AND wt=

WHILE@ID=1

BEGIN

  INSERTINTO #BOM SELECTDISTINCT A.p,B.c,B.wt,B.qty*A.qtyAS QTY,A.L+1AS L FROM #BOM A INNERJOIN Bom B ON A.c=B.pINNER JOIN(SELECT * FROM(SELECTROW_NUMBER()OVER(PARTITIONBY C,WT,LORDER BY C,WT,LDESC) AS ID,P,C,WT,L,QTYFROM #BOM WHERE wt=4)XWHERE ID=1)A1ON A1.C=A1.CAND A.L=A1.LAND A.wt=A1.wtWHEREA.LIN(SELECT MAX(L)FROM #BOM)

SELECT@ID=COUNT(DISTINCT WT)FROM #BOM WHERE L IN(SELECTMAX(L)AS L FROM #BOM )AND wt=4

END

SELECT * FROM #BOM WHERE WT=3ORDER BY P,L

结果 


原创粉丝点击