求进销存中的仓库配货问题

leongwong 2006-11-10 10:43:04
两个数据表,为了方便大家理解,用中文名解析

销售出库单表
物品编号 出库数量 批号
1001 10
1002 9
1003 8
1001 2
1004 10

库存量表
物品编号 现存数量 批号
1001 10 批号1
1001 20 批号2
1002 5 批号1
1002 9 批号2
1003 7 批号1
1004 30


注:每个物品可能没有批号,也可能有多个批号,有批号的话,要按照批号进行出库。同时,要按照先进先出法,批号早的先出库,一个批号的数量如果不够,索引下一个批号的数量进行补充,否则,按现有的实际库存(库存量表中的现存数量)进行出库。

想要得到的结果如下:

物品编号 出库数量 批号
1001 10 批号1
1002 4 批号1
1002 5 批号2
1003 7 批号1
1001 2 批号2
1004 10

以上的需求,写过进销存的朋友可能都会遇到过,因为在销售出库单中,只索引某个物品的总库存够不够销售,而到了库存系统中,就要对
销售出库单中的物品,按照批号进行配货!

能理解的朋友写出SQL语句,或者,给出比较好的处理方法!
...全文
291 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
leongwong 2006-11-10
  • 打赏
  • 举报
回复
我这儿目前的业务需求,还没有楼上说的那么复杂!谢谢楼上的提醒!
eaststarwy 2006-11-10
  • 打赏
  • 举报
回复
我们使用的数据库对出入库的处理多加了一个对所有出入项目的记录表,
,因为有的时候并不是所有的出项都按照某单一规则(先进先出等等),这个是所有使用公司出现的问题.使用者不会理会你所说的严格按照某规则出库,也不会按照你出库计算的数据去跟供货商结算(涉及到多货源进货折扣问题自然就涉及成本利益),所以如果想满足使用就要单独有一个或者多个记录所有冲减记录的表,你不但要设计一个存储过程来允许重新计算多货源冲减,而且还要设计一模块允许手动更改某些出项的冲减.想做好这个部分真的好复杂好复杂.头都大
leongwong 2006-11-10
  • 打赏
  • 举报
回复
好的!谢谢楼上,我试下先!
zsforever 2006-11-10
  • 打赏
  • 举报
回复
比较简单的处理
declare @销售出库单表 table(物品编号 nvarchar(16),出库数量 int)
insert into @销售出库单表 select
'1001', 10 union all select
'1002', 9 union all select
'1003', 8 union all select
'1001', 2 union all select
'1004', 10

declare @库存量表 table(物品编号 nvarchar(16),现存数量 int,批号 nvarchar(8))
insert into @库存量表 select
'1001', 10, '批号1' union all select
'1001', 20, '批号2' union all select
'1002', 5, '批号1' union all select
'1002', 9, '批号2' union all select
'1003', 7, '批号1' union all select
'1004', 30, '批号1'

select distinct
a.物品编号,
case when
isnull((select sum(现存数量) from @库存量表 where 物品编号=a.物品编号 and 批号<a.批号),0)
>(select sum(出库数量) from @销售出库单表 where 物品编号=a.物品编号) then 0 when
isnull((select sum(现存数量) from @库存量表 where 物品编号=a.物品编号 and 批号<=a.批号),0)
<(select sum(出库数量) from @销售出库单表 where 物品编号=a.物品编号) then a.现存数量 else
(select sum(出库数量) from @销售出库单表 where 物品编号=a.物品编号) -
isnull((select sum(现存数量) from @库存量表 where 物品编号=a.物品编号 and 批号<a.批号),0) end 出库数量,
a.批号
from @销售出库单表 b,@库存量表 a
where a.物品编号=b.物品编号
order by a.物品编号,a.批号
leongwong 2006-11-10
  • 打赏
  • 举报
回复
沉了下去,再顶起来!
leongwong 2006-11-10
  • 打赏
  • 举报
回复
大家继续顶!
现在就被这个问题卡住了!
zicxc(冒牌邹建 V0.3) 说得没错,发生了一点笔误!
想要得到的结果如下:
物品编号 出库数量 批号
1001 10 批号1
1002 5 批号1
1002 4 批号2
1003 7 批号1
1001 2 批号2
1004 10
laoliu666 2006-11-10
  • 打赏
  • 举报
回复
学习
ch8433 2006-11-10
  • 打赏
  • 举报
回复
用游标实现更直观,更自然。
如果一定要用一句话写出也可以,就是麻烦点。没什么难度啊。
marco08 2006-11-10
  • 打赏
  • 举报
回复
學習
zicxc 2006-11-10
  • 打赏
  • 举报
回复
1002 4 批号1
1002 5 批号2

应该是
1002 5 批号1
1002 4 批号2

库存量表为什么有没有批号的记录?

估计要用游标才保险

leongwong 2006-11-10
  • 打赏
  • 举报
回复
感谢楼上的支持,zsforever(虎虎)的方法能够简单的实现,但不完全符合我的需求,自己想办法!

34,590

社区成员

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

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