库存管理: 关于存量 先进先出的问题?

stwx 2003-08-27 07:36:54
CREATE TABLE #tmp (
ID int IDENTITY (1, 1),
单价 decimal(18, 2) NOT NULL ,
数量 decimal(18, 2) NOT NULL ,
已出数量 decimal(18, 2) NOT NULL ,
T decimal(18, 2) NOT NULL

)
insert into #tmp(单价,数量,已出数量,T) values(1.1,50,0,60)
insert into #tmp(单价,数量,已出数量,T) values(1.3,30,0,60)
insert into #tmp(单价,数量,已出数量,T) values(1.4,60,0,60)
insert into #tmp(单价,数量,已出数量,T) values(1.5,20,0,60)
select * from #tmp
drop table #tmp

/* 记录按先进先出原则, 如
T=60 时
ID1 的 已出数量= 50
ID2 的 已出数量= 10

保存

下一次
T=30
ID3 的 已出数量=30
ID4 的 已出数量=10

请教存储过程的写法,不要用游标.

*/





...全文
85 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-08-28
  • 打赏
  • 举报
回复
CREATE TABLE #tmp (
ID int IDENTITY (1, 1),
单价 decimal(18, 2) NOT NULL ,
数量 decimal(18, 2) NOT NULL ,
已出数量 decimal(18, 2) NOT NULL
)
insert into #tmp(单价,数量,已出数量) values(1.1,50,0)
insert into #tmp(单价,数量,已出数量) values(1.3,30,0)
insert into #tmp(单价,数量,已出数量) values(1.4,60,0)
insert into #tmp(单价,数量,已出数量) values(1.5,20,0)


declare @t decimal(18, 2),@temp decimal(18, 2),@a varchar(8000)
select @t=60,@a=''

update #tmp set @temp=case when @t>数量-已出数量 then 数量-已出数量 else @t end, @t=@t-@temp,@a=@a+','+cast(@temp as varchar(10)),已出数量=@temp+已出数量 where 已出数量<>数量
select * from #tmp

set @t=30

update #tmp set @temp=case when @t>数量-已出数量 then 数量-已出数量 else @t end,@t=@t-@temp,@a=@a+','+cast(@temp as varchar(10)),已出数量=@temp+已出数量 where 已出数量<>数量
select * from #tmp

select right(@a,len(@a)-1)
go
drop table #tmp
CrazyFor 2003-08-28
  • 打赏
  • 举报
回复
update #tmp set @temp=case when @t>数量 then 数量 else @t end, @t=@t-@temp ,已出数量=@temp ,@a=convert(decimal(19,2),@temp)

只句语相当于一个循环的功能,在你的表中的每一条记录上遍例一遍,你可以一条条记录的忘上面的语句中套,就可以理解这句的意义了
stwx 2003-08-27
  • 打赏
  • 举报
回复
为什么 @temp 值 赋给字段 T 就可以,而赋给变量则不行???
stwx 2003-08-27
  • 打赏
  • 举报
回复
大力:进一步请教?

declare @a varchar(10)
update #tmp set @temp=case when @t>数量 then 数量 else @t end, @t=@t-@temp ,已出数量=@temp ,@a=convert(decimal(19,2),@temp)

为什么? @a 值为0, 我要将每一行的 @temp 转为 varchar 以便同时生成SQL语句 exec ,如何保存 @temp 值
pengdali 2003-08-27
  • 打赏
  • 举报
回复
不是写出来了?
stwx 2003-08-27
  • 打赏
  • 举报
回复
大力:

如果 已出数量 已有部分已出, 即多次出货,如何改.
pengdali 2003-08-27
  • 打赏
  • 举报
回复
CREATE TABLE #tmp (
ID int IDENTITY (1, 1),
单价 decimal(18, 2) NOT NULL ,
数量 decimal(18, 2) NOT NULL ,
已出数量 decimal(18, 2) NOT NULL
)
insert into #tmp(单价,数量,已出数量) values(1.1,50,0)
insert into #tmp(单价,数量,已出数量) values(1.3,30,0)
insert into #tmp(单价,数量,已出数量) values(1.4,60,0)
insert into #tmp(单价,数量,已出数量) values(1.5,20,0)


declare @t decimal(18, 2),@temp decimal(18, 2)
set @t=60

update #tmp set @temp=case when @t>数量-已出数量 then 数量-已出数量 else @t end, @t=@t-@temp ,已出数量=@temp+已出数量 where 已出数量<>数量
select * from #tmp

set @t=30

update #tmp set @temp=case when @t>数量-已出数量 then 数量-已出数量 else @t end,@t=@t-@temp,已出数量=@temp+已出数量 where 已出数量<>数量
select * from #tmp

go
drop table #tmp
pengdali 2003-08-27
  • 打赏
  • 举报
回复
你的T应该是个变量,而不是一个加在后面的列。

CREATE TABLE #tmp (
ID int IDENTITY (1, 1),
单价 decimal(18, 2) NOT NULL ,
数量 decimal(18, 2) NOT NULL ,
已出数量 decimal(18, 2) NOT NULL
)
insert into #tmp(单价,数量,已出数量) values(1.1,50,0)
insert into #tmp(单价,数量,已出数量) values(1.3,30,0)
insert into #tmp(单价,数量,已出数量) values(1.4,60,0)
insert into #tmp(单价,数量,已出数量) values(1.5,20,0)


declare @t decimal(18, 2),@temp decimal(18, 2)
set @t=60

update #tmp set @temp=case when @t>数量 then 数量 else @t end, @t=@t-@temp ,已出数量=@temp
select * from #tmp
go
drop table #tmp

34,875

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧