--庫存表
create
table
t( id
intidentity(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
=@nameif(
@spare
>=
@cost
)begin
--根據入庫日期採用先進先出原則對貨物的庫存進行處理
update
t setc=
case
when
(select
@cost
-isnull
(sum
(j),0)
+isnull
(sum
(c),0)
from
t where
name
=@name
andjdate
<=
a.jdate
andj
!=c)
>=
0then
a.j
else
case
when
(select
@cost
-isnull
(sum
(j),0)
+isnull
(sum
(c),0)
from
t where
name
=@name
andjdate
<
a.jdate
andj
!=c)
<
0then
0else
(select
@cost
-isnull
(sum
(j),0)
+isnull
(sum
(c),0)
+a.c
from
t where
name
=@name
andjdate
<
a.jdate
andj
!=c)
endend
from
t a
where
name
=@name
andj
!=c
endelse
raiserror('
庫存不足',
16,1)
return
go--
測試:exec
wsp
@name='
a',@cost
=390
select
*fromt--
刪除測試環境
drop
table
tdrop
proc
wsp
「先進先出」的庫存處理
很經典的 先進先出 的庫存處理的sql語句。create table tmp 建立臨時表 tmp id int identity 1,1 建立列id,並且每次新增一條記錄就會加1 單價 decimal 18,2 not null 數量 decimal 18,2 not null 已出數量 decim...
基於C語言的小型超市庫存與銷售管理系統
1 需求分析 1.1 登陸 管理員和售貨員可通過各自的賬號 密碼分別進入管理員和售貨員的子系統。對於輸入不在系統所儲存的賬號或輸入的賬號密碼不匹配時,要求使用者重新輸入。1.2 使用者管理 管理員使用者可瀏覽系統內所有的使用者的賬號 密碼 許可權類別,可新增使用者,可刪除使用者。1.3 庫存管理 管...
基於C語言的小型超市庫存與銷售管理系統
1 需求分析 1.1 登陸 管理員和售貨員可通過各自的賬號 密碼分別進入管理員和售貨員的子系統。對於輸入不在系統所儲存的賬號或輸入的賬號密碼不匹配時,要求使用者重新輸入。1.2 使用者管理 管理員使用者可瀏覽系統內所有的使用者的賬號 密碼 許可權類別,可新增使用者,可刪除使用者。1.3 庫存管理 管...