库存先进先出简单例子

-- 库存先进先出简单例子:

create table t(
id
int identity ( 1 , 1 ),
name
varchar ( 50 ), -- 商品名称
j int ,        -- 入库数量
c int ,        -- 出库数量
jdate datetime -- 入库时间
)
insert into t(name,j,c,jdate) select   ' A ' , 100 , 0 , ' 2007-12-01 '
insert into t(name,j,c,jdate) select   ' A ' , 200 , 0 , ' 2008-01-07 '
insert into t(name,j,c,jdate) select   ' B ' , 320 , 0 , ' 2007-12-21 '
insert into t(name,j,c,jdate) select   ' A ' , 100 , 0 , ' 2008-01-15 '
insert into t(name,j,c,jdate) select   ' B ' , 90 , 0 , ' 2008-02-03 '
insert into t(name,j,c,jdate) select   ' A ' , 460 , 0 , ' 2008-02-01 '
insert into t(name,j,c,jdate) select   ' A ' , 510 , 0 , ' 2008-03-01 '
go



create proc wsp
@name varchar ( 50 ), -- 商品名称
@cost int          -- 销售量
as
-- 先得出该货物的库存是否够
declare @spare float -- 剩余库存
select @spare = sum (j) - sum (c) from t where name = @name
if ( @spare >= @cost )
begin
   
-- 根据入库日期采用先进先出原则对货物的库存进行处理
    update t set c =
   
case when ( select @cost - isnull ( sum (j), 0 ) + isnull ( sum (c), 0 ) from t where name = @name and jdate <= a.jdate and j != c) >= 0
   
then a.j
   
else
       
case when ( select @cost - isnull ( sum (j), 0 ) + isnull ( sum (c), 0 ) from t where name = @name and jdate < a.jdate and j != c) < 0 then 0
       
else ( select @cost - isnull ( sum (j), 0 ) + isnull ( sum (c), 0 ) + a.c from t where name = @name and jdate < a.jdate and j != c)
       
end
   
end
   
from t a where name = @name and j != c
end
else
   
raiserror ( ' 库存不足 ' , 16 , 1 )   
   
return
go


-- 测试:

exec wsp @name = ' A ' , @cost = 180
select * from t


-- drop table t
--
drop proc wsp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值