库存台帐报表存储过程

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值