--庫存表
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--,--銷售量
--@returns int output --該貨物的庫存是否夠(不夠:-1;夠:1)
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=390
select * from t
--刪除測試環境
drop table t
drop proc wsp
SQL處理庫存與銷售,先進先出原則
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.