oracle sql处理库存先进先出逻辑(急) 100

数据表中存在入库和出库流水。但是出库流水中没有记载对应的入库单主键(唯一id),出入库业务中存在一对多,多对一和多对多的关系。需要根据物料和批次按先进先出的逻辑列出入库出... 数据表中存在入库和出库流水。但是出库流水中没有记载对应的入库单主键(唯一id),出入库业务中存在一对多,多对一和多对多的关系。需要根据物料和批次按先进先出的逻辑列出入库出了哪些出库的明细。以下是数据例子和要求的查询返回结果列。谢谢!!(sql+存储过程亦可)

数据例子材料:
入库流水:
入库日期 入库单号 物料 批次 入库数量
2015-01-01 cr01 aa 001 100
2015-01-02 cr02 aa 001 150
2015-01-03 cr03 aa 001 100
2015-01-05 cr04 aa 001 200

出库流水
出库日期 出库单号 物料 批次 出库数量
2015-01-03 xc01 aa 001 50
2015-01-04 xc02 aa 001 100
2015-01-06 xc03 aa 001 250

查询出来的结果返回:入日期 物料 批号 入单 数量 入期初 出日期 出单 出数量 出期初 入余额 出余额
2015-01-01 aa 001 cr01 100 100 2015-01-03 xc01 50 50 50 0
2015-01-02 aa 001 cr01 100 50 2015-01-04 xc02 100 100 0 50
2015-01-03 aa 001 cr02 150 150 2015-01-04 xc02 100 50 100 0
2015-01-03 aa 001 cr03 150 100 2015-01-06 xc03 250 250 0 150
2015-01-05 aa 001 cr04 200 200 2015-01-06 xc03 250 150 50 0
展开
 我来答
匿名用户
2015-06-09
展开全部
create table 表1(货号 varchar(20),批次 int ,数量 int)

create table 表2(货号 varchar(20) ,数量 int)
/*------------------------------*/
insert into 表1
select '001', 1, 100 union all
select '001', 2, 200 union all
select '001', 3, 300

/*------------------------------*/
insert into 表2
select '001', 400
/*------------------------------*/
select * from 表1

select * from 表2
/*------------------------------*/
select t1.货号,t1.批次,
case when ((select isnull(sum(数量),0) from 表1 t3 where t3.货号=t1.货号 and t3.批次<t1.批次)-isnull(t2.new_数量,0))<0
then case when ((select sum(数量) from 表1 t4 where t4.货号=t1.货号 and t4.批次<=t1.批次)-isnull(t2.new_数量,0))<0 then 0
else ((select sum(数量) from 表1 t4 where t4.货号=t1.货号 and t4.批次<=t1.批次)-isnull(t2.new_数量,0))
end
else t1.数量
end as 批次剩余库存数
from 表1 t1
left join (select 货号,sum(数量) as new_数量 from 表2 group by 货号) t2
on t1.货号=t2.货号
/*------------------------------*/

PS:上面将null转换为0的函数为isnull,是SQL SERVER下的函数,你只要根据你的数据转换为对应函数就可以了,如oracle是nvl,mysql是ifnull等等.
追问
这个我在网上也找到,但是只能查到维度下的余额,没法跟踪每批入库对应出库的发出数。
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式