库存台帐报表存储过程

库存台帐报表存储过程,包含While语句,两次循环,原理很简单,但是提供了两次循环的操作方法。

  1None.gif------------------------------------
  2None.gif--用途:查询,统计,用于库存台帐
  3None.gif------------------------------------
  4None.gifCREATE PROCEDURE dbo.Jmeport_get_storage_price
  5None.gif
  6None.gif @maxGoodsCode varchar(10),        --商品编码大
  7None.gif @minGoodsCode varchar(10),        --商品编码小
  8None.gif @StartTime datetime,            --日期大
  9None.gif @EndTime datetime,            --日期小
 10None.gif @maxStorage varchar(10),        --仓库编码大
 11None.gif @minStorage varchar(10)        --仓库编码小
 12None.gif 
 13None.gifAS
 14None.gif    SET NOCOUNT ON
 15None.gifdeclare @SQL nvarchar(2000)
 16None.gif
 17None.gifCREATE TABLE #A(goodsnumber varchar(10),goodsname varchar(20),goodstype varchar(20),dept varchar(10),storageid varchar(10),storage varchar(36),incount decimal(10,2),
 18None.gifoutcount decimal(10,2),remaincount decimal(10,2),averageprice decimal(10,2),countprice decimal(10,2))
 19None.gif
 20None.gifSET @SQL=' AND(1=1)'
 21None.gif
 22None.gifIF @maxGoodsCode<>''
 23None.gifSET @SQL=@SQL+' AND( BB05.BB0501<=@maxGoodsCode)'
 24None.gifIF @minGoodsCode<>''
 25None.gifSET @SQL=@SQL+' AND( BB05.BB0501>=@minGoodsCode)'
 26None.gifIF @maxStorage<>''
 27None.gifSET @SQL=@SQL+' AND( BA05.BA0501>=@maxStorage)'
 28None.gifIF @minStorage<>''
 29None.gifSET @SQL=@SQL+' AND( BA05.BA0501<=@minStorage)'
 30None.gif
 31None.gif
 32None.gif--因为没有涉及到出入库内容,所以需要显示全部仓库和商品信息,如果出入库内容不存在,就把那两列设为0
 33None.gif--SET @SQL=' AND(1=1)'
 34None.gifSET @SQL=N'
 35None.gifselect BB05.BB0501,BB05.BB0503,BB03.BB0303,BB05.BB0506,BA05.BA0501,BA05.BA0502,BA07.BA0703 as 期末结存数量,BA07.BA0704/case when BA07.BA0703=0 then 1 else BA07.BA0703 end as 期末平均成本,BA07.BA0704 as 期末总金额
 36None.giffrom BA07 left join BB05 on BA07.BA0702=BB05.BB0501 left join BB03 on BB05.BB0505=BB03.BB0301 left join BA05 on BA07.BA0701=BA05.BA0501
 37None.gif'
 38None.gif+@SQL
 39None.gif
 40None.gif
 41None.gifINSERT INTO #A(goodsnumber,goodsname ,goodstype ,dept ,storageid,storage ,remaincount ,averageprice ,countprice)
 42None.gifEXEC sp_executesql @SQL,
 43None.gifN'
 44None.gif @maxGoodsCode varchar(10),
 45None.gif @minGoodsCode varchar(10),
 46None.gif @StartTime datetime,
 47None.gif @EndTime datetime,
 48None.gif @maxStorage varchar(10),
 49None.gif @minStorage varchar(10)
 50None.gif',
 51None.gif @maxGoodsCode,        --商品编码大
 52None.gif @minGoodsCode,        --商品编码小
 53None.gif @StartTime,            --日期大
 54None.gif @EndTime,            --日期小
 55None.gif @maxStorage,        --仓库编码大
 56None.gif @minStorage    --仓库编码小
 57None.gif
 58None.gif
 59None.gif
 60None.gif--向临时表中加入incount列的值
 61None.gifdeclare @MinGoods varchar(10),@MaxGoods varchar(10),@MinStorageid varchar(10),@MaxStorageid varchar(10),@flag varchar(36),@incount decimal(10,2)
 62None.gifselect @MinGoods=min(goodsnumber),@MaxGoods=max(goodsnumber) from #A
 63None.gifwhile(@MinGoods<=@MaxGoods)
 64None.gifBegin
 65None.gif
 66None.gif    select @MinStorageid=min(storageid),@MaxStorageid=max(storageid) from #A where goodsnumber=@MinGoods
 67None.gif    while(@MinStorageid<=@MaxStorageid)
 68None.gif    begin
 69None.gif        select @flag=count(*from #A where goodsnumber=@MinGoods and storageid=@MinStorageid
 70None.gif        if(@flag<>'0')
 71None.gif        begin
 72None.gif            select @incount=sum(BA09.BA0904) from BA09 left join BA10 on BA09.BA0902=BA10.BA0902
 73None.gif            where (BA10.BA1002='+'and (BA09.BB0501=@MinGoodsand (BA10.BA0501=@MinStorageid)
 74None.gif            and (BA10.AA9902>=case when @StartTime<>'' then @StartTime else '1755-2-6' end )
 75None.gif            and (BA10.AA9902<=case when @EndTime<>'' then @EndTime else '2599-6-7' end )
 76None.gif
 77None.gif            update #A set incount=@incount where goodsnumber=@MinGoods and storageid=@MinStorageid
 78None.gif        end
 79None.gif    select @MinStorageid=min(Storageid) from #A where goodsnumber=@MinGoods and storageid>@MinStorageid
 80None.gif    end
 81None.gifselect @MinGoods=min(goodsnumber) from #A where goodsnumber>@MinGoods
 82None.gif
 83None.gifEND
 84None.gif--向临时表中加入outcount列的值
 85None.gifselect @MinGoods=min(goodsnumber),@MaxGoods=max(goodsnumber) from #A
 86None.gifwhile(@MinGoods<=@MaxGoods)
 87None.gifBegin
 88None.gif
 89None.gif    select @MinStorageid=min(storageid),@MaxStorageid=max(storageid) from #A where goodsnumber=@MinGoods
 90None.gif    while(@MinStorageid<=@MaxStorageid)
 91None.gif    begin
 92None.gif        select @flag=count(*from #A where goodsnumber=@MinGoods and storageid=@MinStorageid
 93None.gif        if(@flag<>'0')
 94None.gif        begin
 95None.gif            select @incount=sum(BA09.BA0904) from BA09 left join BA10 on BA09.BA0902=BA10.BA0902
 96None.gif            where (BA10.BA1002='-'and (BA09.BB0501=@MinGoodsand (BA10.BA0501=@MinStorageid)
 97None.gif            and (BA10.AA9902>=case when @StartTime<>'' then @StartTime else '1755-2-6' end )
 98None.gif            and (BA10.AA9902<=case when @EndTime<>'' then @EndTime else '2599-6-7' end )
 99None.gif
100None.gif            update #A set outcount=@incount where goodsnumber=@MinGoods and storageid=@MinStorageid
101None.gif        end
102None.gif    select @MinStorageid=min(Storageid) from #A where goodsnumber=@MinGoods and storageid>@MinStorageid
103None.gif    end
104None.gifselect @MinGoods=min(goodsnumber) from #A where goodsnumber>@MinGoods
105None.gif
106None.gifEND
107None.gif
108None.gif--select  storage,goodsnumber ,goodsname ,sheetdate ,sheetabout ,sheetnumber,outcount ,outprice ,outcountprice ,incount ,inprice ,incountprice from #A
109None.gif--select * from #A
110None.gifset @SQL='select * from #A'
111None.gifexec(@SQL)
112None.gif
113None.gif
114None.gifdrop table #A
115None.gif
116None.gif
117None.gifGO
118None.gif

转载于:https://www.cnblogs.com/davidathena/archive/2007/06/04/770912.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值