求一条有点复杂的库存扣减MS SQL问题

zhlym 2007-12-04 02:51:42

库存扣减问题

库存表AA

code numb ck
A001 10 K01
A002 20 K01
A001 15 K02
A001 15 K03
A001 0 K04

解释:AA表为库存表,库表会出现同一样商品放在不同的仓库里,即商品相同,仓库不同。
code为编号(有重复),numb为库存数,ck为仓库


现在有一笔销售记录产生要求扣库存,假如A001商品销30个,在扣库存时条件是:
1、商品销售数不会大于该商品的总库存数
2、numb库存数为零不扣
3、numb库存数 - 销售数 < 0 则只扣完该库存数,剩下的不够扣的往一笔推,依次类推最后把销售数量扣完

以上条件不知能不能一组尽量简结的SQL语句搞定?请大家出下手,3Q
...全文
270 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jaket_vip 2007-12-04
  • 打赏
  • 举报
回复
提示,请有游标实现
zhlym 2007-12-04
  • 打赏
  • 举报
回复
不好意思,实际中是有一个唯一值的ID的这列的
cd_ch 2007-12-04
  • 打赏
  • 举报
回复
没id?
有没入库时间或者入库号。还有就是批号。
zhlym 2007-12-04
  • 打赏
  • 举报
回复
搞错,这里更正下

print '这里已扣完销售数量'
update AA set numb=numb-@sels where id = @tbid
zhlym 2007-12-04
  • 打赏
  • 举报
回复
我倒是做出来了,不过一堆语句觉得不爽,也不知效率怎样,固请大家出下手,最好一条语过搞定,不用循环之类完意

declare @tbid int '当前的读到记录时的ID,以用于更新时直用ID定位
declare @sels int '销售量
declare @stmb int '开始循环数
declare @numb int '总循环数
declare @ku int '当前记时的实际数存数

set @stmb=0
set @sels=6

select @numb=count(0) from AA
while @stmb < @numb
begin
set @ku=0
select @ku=numb,@tbid=id from AA where numb>0
if @ku-@sels > 0
begin
print '这里已扣完销售数量'
update AA set numb=0 where id = @tbid
end
else
begin
update AA set numb= numb-@ku where id = @tbid
set @ku=@sels-@ku
print '这里只扣完其库存数,剩余的数量在下一个环节上再扣'
end
set @sels=@sels-@ku
print @ku
set @stmb=@stmb+1
end
-狙击手- 2007-12-04
  • 打赏
  • 举报
回复
扣除的顺序规则没作说明 ?
dawugui 2007-12-04
  • 打赏
  • 举报
回复
code numb ck
A001 10 K01
A002 20 K01
A001 15 K02
A001 15 K03
A001 0 K04
我认为上面的东西应该加一字段,来判断谁先扣,谁后扣,不然不好搞.

或者生成一临时表,ID自然排序.

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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