SQL疑难请教

BOM结构ABCDA是成品,B是半成品,C和D是原材料--BOM展开后的表(此部分已经实现)CREATETABLE[dbo].[TMP_BOM]([母件编码][varch... BOM 结构

A

B C

D
A是成品,B是半成品,C和D是原材料

--BOM 展开后的表(此部分已经实现)
CREATE TABLE [dbo].[TMP_BOM]
(
[母件编码] [varchar] (100) ,
[子件编码] [varchar] (100) ,
[基本用量] [float] NULL,
[cpath] [varchar] (1000) ,
) ON [PRIMARY]
GO
INSERT INTO dbo.TMP_BOM ( 母件编码, 子件编码, 基本用量, cpath)
SELECT 'A', 'B', 1, '10' UNION
SELECT 'A', 'C', 1, '20' UNION
SELECT 'A', 'D', 2, '10-10'

--库存表
CREATE TABLE tmp_kc(物料编码 VARCHAR(50),数量 int)
INSERT INTO dbo.tmp_kc ( 物料编码, 数量 )
SELECT 'A',10 UNION
SELECT 'B',20
SELECT 'D',10

--想要的效果
--输入产品(A)数量100,首先扣减库存表中的产品A的数量 10,得出A欠料90
--半成品B欠料数量90减去库存20,得出B欠料70
--原材料D欠料70*2-减去库存10,得出欠料130
--原材料C欠料90

母件编码 子件编码 基本用量 cpath 需求数量 库存分配数量 欠料数量
A A 1 10 100 10 90
A B 1 10 90 20 70
A D 2 10-10 140 10 130
A C 1 20 90 0 90
想要的效果
展开
 我来答
SDMG123
2018-09-19 · TA获得超过6177个赞
知道大有可为答主
回答量:6676
采纳率:80%
帮助的人:673万
展开全部

展BOM又见展BOM。

你这个是排产时给别人看材料消耗情况的。欠料哪里考虑未必全欠,应该负数部分等于零,是给生产领料用的。你的表结构明显不支持边角料,不过估计是作业来的吧。

首先这个需要有2个问题:

1,A不应该存在A子件。A应该先查库存量,在进行排产所以你的这个逻辑错误了,我就将错就错写出来。

2,B欠料70,但是原材料D欠料70*2?B和D没有直接关联,应该是90*2=180

下面就是根据你的需求执行的结果

sql如下:

begin

DECLARE @fullno int

set @fullno = 100

select 物料编码 母件编码,物料编码 子件编码,1 基本用量,'10' cpath ,@fullno 需求数量,数量 库存分配数量,@fullno-数量 欠料数量

from  tmp_kc where 物料编码 ='A'

UNION all

select *,(@fullno-(select 数量 from    tmp_kc where 物料编码 =TMP_BOM.母件编码))* 基本用量 需求数量 

,isnull((select 数量 from    tmp_kc where 物料编码 =TMP_BOM.子件编码),0) 库存分配数量

,(@fullno-(select 数量 from    tmp_kc where 物料编码 =TMP_BOM.母件编码))* 基本用量 -

isnull((select 数量 from    tmp_kc where 物料编码 =TMP_BOM.子件编码),0) 欠料数量

from   TMP_BOM  

where 母件编码='A'

end

我是圆白菜啊
2018-09-19 · TA获得超过118个赞
知道小有建树答主
回答量:346
采纳率:50%
帮助的人:41.8万
展开全部
Mes..............
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式