当前位置: 代码迷 >> Oracle开发 >> 实现方法
  详细解决方案

实现方法

热度:116   发布时间:2016-04-24 06:37:29.0
求助实现方法
各位大大,现在我有2张表是当前库存表Stock(当中有一个字段是每月初期库存数),入出库表Issue(数量正数为进,负数为出),我想要得到当月每一天的库存数量表,怎么实现呢?
就好比今天是8月4日,我有一个产品,本月初期库存数是1000个,然后8月1日出了200个,8月2日无出入库,8月3日进了100个,那我就想得到三条数据:
日期                   库存
8月1日             800
8月2日             800
8月3日             900

用sql语句怎么实现呢?
------解决方案--------------------
构造一个日期即可

with vir_date as(
select  x1.产品,x2.日期
from(select distinct 产品 from stock where 月份='xxx') x1,(select to_char(trunc(sysdate,'MM')+rownum-1,'YYYY-MM') 日期  from dual connect by rownum<=sysdate-trunc(sysdate,'MM')+1)x2)

select vir_date.产品,vir_date.日期,a.期初库存+sum(nvl(b.入库数,0))over(partition by vir_date.产品,a.月份 order by vir_date.日期) as 库存
from vir_date,stock a,issue b
where a.产品=b.产品(+)
and a.月份=substr(b.日期(+),1,7)
and a.月份='xxx'
and a.产品=vir_date.产品
and b.日期(+)=vir_date.产品
order by vir_date.产品,vir_date.日期
------解决方案--------------------
呵呵,大版都写完了啊,不过有点问题
每天可能会有多次出库入库的操作,这样的话就重复了

把大版语句中的issue b 替换成楼主语句中的V2,应该就可以了
  相关解决方案