数据表:
入库表: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 |
你原始數據是什麼樣的?
这个有点复杂,最好使用临时表,下面是伪代码(未通过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
给你一个思路,先找入库记录,再找出库记录,根据日期先后做排序,最后据此可以递推算出本期结存
代码就不帮你写了 给你个提点,SQL有个功能CTE,你可以搜搜看,可以满足你的这个需求。
计算一定时间段内的总出库量和入库量,然后得出这段时间内的库存量。
通常不会这么傻,每次使用存储过程临时计算出来。而是会将计算后的结果保存在一个数据表中。
计算过程那个ID全是数字的家伙还是比较有耐心的,我也没看,当他写对了,存储过程没啥好说的,
自己查查CURSOR和循环咋用,总是能写出来的,如果写不出来,那就换个工作吧,不要编程了。
只是计算库存数并不难,也不至于要用到游标。
你所说的库存是查询时间段截止时间'2014.05.20'时的库存吗?最好是有一张盘库表,定期存储库存盘库信息(当然也可以不定期),查询某个时间段中的库存时结合盘库表和出入库表统计出需要的数据,这样效率应该高些。刚做过这样的需求
加加减减就是了