首页 新闻 会员 周边 捐助

已知入库、出库表,算库存

1
悬赏园豆:180 [待解决问题]

 

数据表:

入库表:vcg_wzrkd,列:sl入库数spbh商品编号ywrq入库日期djbh单据编号

出库表:vcg_wzckd,列:sl出库数spbh商品编号ywrq出库日期djbh单据编号

 

要求做出如下结果存储过程

存储过程参数@spbh varchar(100),@rq1 datetime,@rq2 datetime

商品编号,开始日期,结束日期

 

运行存储过程 '00010666','2014.01.01','2014.05.20'

显示如下结果:

序号

日期

摘要

入库数

出库数

库存

1

 

00010666 

 

 

92920.

2

2014.01.13

ALRRKG00001841

31320.

 

124240.

3

2014.01.24

ALRCKS00000341

 

22000.

102240.

4

2014.02.28

ALRCKS00000469

 

16689.5

85550.5

5

2014.03.04

ALRRKG00001992

29980.

 

115530.5

6

2014.03.31

ALRCKS00000653

 

10000.

105530.5

7

2014.04.30

ALRCKS00000781

 

18976.

86554.5

 

 

 

 

1573978409的主页 1573978409 | 初学一级 | 园豆:22
提问于:2014-09-15 21:53
< >
分享
所有回答(9)
0

你原始數據是什麼樣的?

会飞的金鱼 | 园豆:881 (小虾三级) | 2014-09-15 22:10
1

这个有点复杂,最好使用临时表,下面是伪代码(未通过SQL验证,你可以自行修正):

create storeprocedure dbo.CalcStore(@spbh varchar(100),@rq1 datetime,@rq2 datetime)
as
begin
    create table #tempStore(序号 int, 日期 datetime null, 摘要 varchar(100), 入库数 int null, 出库数 int null, 库存 int);
    set rq2 = dateadd(d, rq2, 1);
    declare cursor curData for
        select (ywrq, djbh, type, s1) from (
            select ywrq, djbh, 1 as type, s1, spbh from vcg_wzrkd
            union
            select ywrq, djbh, -1 as type, s1, spbh from vcg_wzckd
        ) where spbh = @spbh and ywrq >= rq1 and ywrq < rq2 order by ywrq asc
    declare @no int;
    declare @store int;
    declare @rq datetime;
    declare @djbh varchar(100);
    declare @s1 int;
    declare @type int;
    set @no = 1;
    set @store = (select sum(s1) from vcg_wzrkd where spbh = @spbh and ywrq < rq1)
           - (select sum(s1) from vcg_wzckd where spbh = @spbh and ywrq <rq1);
    insert into #tempStore (序号,摘要, 库存) values (@no, @spbh, @store);
    fetch curData into @rq, @djbh, @type, @s1;
    while @@error_level <> 0
    begin
        set @no = @no + 1;
        if @type = 1
        begin
            set @store = @store + @s1;
            insert into #tempStore (序号,日期, 摘要, 入库数, 库存) values (@no, @rq, @djbh, @s1, @store);
        end
        else
        begin
            set @store = @store - @s1;
            insert into #tempStore (序号,日期, 摘要, 出库数, 库存) values (@no, @rq, @djbh, @s1, @store);
        end
        fetch curData into @rq, @djbh, @type, @s1;
    end
    select * from #tempStore;
end
519740105 | 园豆:5810 (大侠五级) | 2014-09-15 23:18
0

给你一个思路,先找入库记录,再找出库记录,根据日期先后做排序,最后据此可以递推算出本期结存

天堂的鸽子 | 园豆:138 (初学一级) | 2014-09-16 00:15
0

代码就不帮你写了 给你个提点,SQL有个功能CTE,你可以搜搜看,可以满足你的这个需求。

Jay_Ai | 园豆:12 (初学一级) | 2014-09-16 15:34
0

计算一定时间段内的总出库量和入库量,然后得出这段时间内的库存量。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-16 22:48
0

通常不会这么傻,每次使用存储过程临时计算出来。而是会将计算后的结果保存在一个数据表中。

计算过程那个ID全是数字的家伙还是比较有耐心的,我也没看,当他写对了,存储过程没啥好说的,

自己查查CURSOR和循环咋用,总是能写出来的,如果写不出来,那就换个工作吧,不要编程了。

爱编程的大叔 | 园豆:30844 (高人七级) | 2014-09-16 23:42
0

只是计算库存数并不难,也不至于要用到游标。

清海扬波 | 园豆:825 (小虾三级) | 2014-09-17 13:46
0

你所说的库存是查询时间段截止时间'2014.05.20'时的库存吗?最好是有一张盘库表,定期存储库存盘库信息(当然也可以不定期),查询某个时间段中的库存时结合盘库表和出入库表统计出需要的数据,这样效率应该高些。刚做过这样的需求

紫雨夜 | 园豆:202 (菜鸟二级) | 2014-09-17 22:02
0

加加减减就是了

大海啊 | 园豆:202 (菜鸟二级) | 2014-09-27 10:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册