34,593
社区成员
发帖
与我相关
我的任务
分享
--目前库存表这样设计的
/*
ID 商品编号 商品名称 库存数量 占用数量 库位 备注
1 DC182 导轨 3 0 K01
2 DC187 AK 1 0 K05 */
--出库明细表
/*
ID 出库日期 出库单号 商品编号 商品名称 订单数量 出库数量 是否已出库
1 2013/1/17 KM1301170001 DC182 导轨 1
2 2013/1/17 KM1301170001 DC187 AK 1
3 2013/1/17 KM1301170001 DC187 AK 1
*/
/*
有以下几点不明白,谁能答疑一下,谢谢
1.库存表这样设计合理吗?
2.根据出库明细表的"商品编号"与"订单数量"去库存表占用数量,判断库存是否足够回写到出库明细表,这样合理吗?
3.要根据出库明细表生成一出库明细,怎么样生成
*/
UPDATE t2
SET 出库数量=CASE WHEN t1.库存数量-ISNULL(o.订单数量,0)<t2.订单数量 THEN t1.库存数量-ISNULL(o.订单数量,0) ELSE t2.订单数量 END
from
t1
,t2
OUTER APPLY(SELECT
SUM(订单数量) AS 订单数量
FROM t2 AS x
WHERE x.商品编号=t2.商品编号
AND x.ID<t2.ID
) AS o
Where t1.商品编号=t2.商品编号
And t2.是否已完成出库='否'
USE test
GO
-->生成表t1
if object_id('t1') is not null
drop table t1
Go
Create table t1([ID] smallint,[商品编号] nvarchar(5),[商品名称] nvarchar(2),[库存数量] smallint,[占用数量] smallint,[库位] nvarchar(3),[备注] nvarchar(50))
Insert into t1
Select 1,N'DC182',N'导轨',3,N'0',N'K01',null
Union all Select 2,N'DC187',N'AK',3,N'0',N'K05',null
-->生成表t2
if object_id('t2') is not null
drop table t2
Go
Create table t2([ID] smallint,[出库日期] datetime,[出库单号] nvarchar(12),[商品编号] nvarchar(5),[商品名称] nvarchar(2),[订单数量] smallint,[出库数量] smallint,[备注] nvarchar(50))
Insert into t2
Select 1,'2013/1/17',N'KM1301170001',N'DC182',N'导轨',1,0,null
Union all Select 2,'2013/1/17',N'KM1301170001',N'DC187',N'AK',1,0,null
Union all Select 3,'2013/1/17',N'KM1301170001',N'DC187',N'AK',5,0,null
UPDATE t2
SET 出库数量=CASE WHEN t1.库存数量-ISNULL(o.订单数量,0)<t2.订单数量 THEN t1.库存数量-ISNULL(o.订单数量,0) ELSE t2.订单数量 END
from
t1
,t2
OUTER APPLY(SELECT
SUM(订单数量) AS 订单数量
FROM t2 AS x
WHERE x.商品编号=t2.商品编号
AND x.ID<t2.ID
) AS o
UPDATE t1
SET 占用数量=(SELECT SUM(出库数量) FROM t2 WHERE t1.商品编号=t2.商品编号)
SELECT * FROM t1
SELECT * FROM t2
/*
ID 商品编号 商品名称 库存数量 占用数量 库位 备注
------ ----- ---- ------ ------ ---- --------------------------------------------------
1 DC182 导轨 3 1 K01 NULL
2 DC187 AK 3 3 K05 NULL
ID 出库日期 出库单号 商品编号 商品名称 订单数量 出库数量 备注
------ ----------------------- ------------ ----- ---- ------ ------ --------------------------------------------------
1 2013-01-17 00:00:00.000 KM1301170001 DC182 导轨 1 1 NULL
2 2013-01-17 00:00:00.000 KM1301170001 DC187 AK 1 1 NULL
3 2013-01-17 00:00:00.000 KM1301170001 DC187 AK 5 2 NULL
*/
库存表:
ID 商品编号 商品名称 库存数量 占用数量 库位 备注
1 DC182 导轨 3 0 K01
2 DC187 AK 3 0 K05
出库表:
ID 出库日期 出库单号 商品编号 商品名称 订单数量 出库数量 备注
1 2013/1/17 KM1301170001 DC182 导轨 1
2 2013/1/17 KM1301170001 DC187 AK 1
3 2013/1/17 KM1301170001 DC187 AK 5
最后想得出以下结果,条件:根据出库明细表"商品编号"去库存表的"商品编号"判断订单数量与库存数量,然后更新"库存表-占用数量"及"出库信息表-出库数量",求SQL语句或存储过程,谢谢!
库存表:
ID 商品编号 商品名称 库存数量 占用数量 库位 备注
1 DC182 导轨 3 1 K01
2 DC187 AK 3 3 K05
出库明细表
ID 出库日期 出库单号 商品编号 商品名称 订单数量 出库数量 备注
1 2013/1/17 KM1301170001 DC182 导轨 1 1
2 2013/1/17 KM1301170001 DC187 AK 1 1
3 2013/1/17 KM1301170001 DC187 AK 5 2