关于先进先出的问题

ccq17 2008-09-10 11:56:52
表A:商品条形码,进货日期,进货数量
表B:商品条形码,销售数量
怎么实现把表B中的记录去表A中从进货日期最早的开始减,也就是查询的时候要实现商品的先进先出算法
用游标实现如下:
declare @Number as int
declare @Numbered as int
declare @id as nvarchar(50)
declare @BarCode varchar(13)
declare @StockNum int
set @Number=0
set @Numbered=0
declare tb cursor local
for select 商品条形码,sum(销售数量) from t_商品出货表新 b group by 商品条形码
open tb
fetch tb into @barcode,@StockNum
while @@fetch_status=0
begin
while @StockNum>0
begin
select top 1 @id=id,@Number=进货数量,@Numbered=已出货数量 from T_商品进货表新 where 商品条形码=@BarCode and 进货数量<>已出货数量 order by 进货日期
if @StockNum>@Number-@Numbered
Update T_商品进货表新 set 已出货数量=已出货数量+@Number-@Numbered where ID=@id
else
Update T_商品进货表新 set 已出货数量=已出货数量+@StockNum where ID=@id
set @StockNum=@StockNum-(@Number-@Numbered)
end
fetch tb into @barcode,@StockNum
end
close tb
deallocate tb
select * from t_商品进货新表
用游标实现实在太慢了,有没有更有效率的方法,谢谢!
...全文
109 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
林虎 2008-09-10
  • 打赏
  • 举报
回复
update d
set 已出货数量=已出货数量+ case when c.销售数量> 进货数量 - 已出货数量 then 进货数量 - 已出货数量
else c.销售数量 end
from T_商品进货表新 d
right join
( select id,进货数量,已出货数量,c.销售数量
from T_商品进货表新 a
right join
(select 商品条形码,sum(销售数量) as 销售数量 from t_商品出货表新 b group by 商品条形码 )c
on a.商品条形码 = c.商品条形码
where not exists(select 1 from T_商品进货表新 where 商品条形码 = a.商品条形码 and 进货日期 > a.进货日期)
and 进货数量 <>已出货数量) b
on d.id = b.id
ccq17 2008-09-10
  • 打赏
  • 举报
回复
顶一下,
pt1314917 2008-09-10
  • 打赏
  • 举报
回复
参考:
http://topic.csdn.net/u/20080614/11/72b44706-5c54-4b38-b6d4-ef31c17da0c7.html
ccq17 2008-09-10
  • 打赏
  • 举报
回复
好像有点不行啊,只能减日期最小的,如果出货数量大于最小日期的进货数量的话,那么剩下的销售数量就不会去减日期每二小的进货数量了

34,590

社区成员

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

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