CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

求高手指点迷津

楼主ewchf(末日之刃)2002-11-16 15:34:43 在 MS-SQL Server / 疑难问题 提问

问这样的过程应该怎样写啊  
   
  zpmx表   字段如下:(一笔一笔的业务都在里面)  
  bmbh(部门编号)   varchar(10)     以部门编号统计  
  khbh(客户编号)   varchar(10)  
  zpbh(支票编号)   varchar(10)  
  rq(日期)   datetime  
  je(金额)   decmial(18,2)  
  djlb(单据类别)   varchar(2)(1:代表收,2:代表付,收就把金额加上,付就减去)  
   
  我要的是统计某一段时间的(列出的是一天一天的)最后金额  
  要得到的是这样的结果:(例如:0100的11-14上午剩下的钱,也就是把11-14上午以前的金额都统计出来(相加相减),得到最后的钱  
  例如:@rq1=02-11-14   14:08:00:77,@rq2   =02-11-16   11:08:00:77  
                部门编号,                                 总的余额  
  02-11-14   上午       0100                           200          
  02-11-14   下午       0100                           300  
  02-11-15   上午       0100                         -300  
  02-11-15   下午       0100                         -1300  
  02-11-16   上午       0100                           5000  
  02-11-16   下午       0100                           4000  
  上午下午我实在写不出来啊,请教啊,一实现马上给分  
   
   
  问题点数:50、回复次数:4Top

1 楼ewchf(末日之刃)回复于 2002-11-16 17:24:28 得分 0

以下是我的没有上午,下午的,求高手指点这个这样加上去啊,不一定要文字啊  
   
   
  SET   QUOTED_IDENTIFIER   ON    
  GO  
  SET   ANSI_NULLS   ON    
  GO  
  ALTER                 procedure   p_cx   @rq1   datetime,@rq2   datetime   as  
  declare   @li_j   int    
  declare   @li_i   int  
  set   @li_i   =   datediff(day,@rq1,@rq2)  
  set   @li_j   =   0  
  create   table   #temp1  
          (bmbh   varchar(40),  
            je   decimal(10,2),  
            rq   datetime           )  
   
  create   table   #temp2  
          (bmbh   varchar(10),  
            je   decimal(10,2),  
            rq   datetime   )  
   
  while   @li_j   <=   @li_i  
  begin  
  insert   into   #temp1(bmbh,je,rq)   select   bmbh,je   =   case   zpmx.djlb   when   '1'   then   zpmx.je   when   '2'   then   -zpmx.je   end,(@rq1+@li_j)   from   zpmx   where   rq   <=   @rq1+@li_j  
  insert   into   #temp2(bmbh,je,rq)   select   bmbh,sum(je),min(CONVERT(decimal(18,2),rq))   from   #temp1   group   by   bmbh  
  delete   from   #temp1  
  set   @li_j=   @li_j   +   1  
   
  end  
   
  select   *   from   #temp2  
  GO  
  SET   QUOTED_IDENTIFIER   OFF    
  GO  
  SET   ANSI_NULLS   ON    
  GO  
   
  Top

2 楼j9988(j9988)回复于 2002-11-16 18:26:25 得分 50

你不是都算出来了?  
   
  下午的就是当天结束的,上午的就是从原表中统出  
  部门日期和#temp2相等,但时间在12:00前的。  
  也就是当天下午结果减去>12:00发生的。  
  select   *,'下午'   as   ppp   from   #temp    
  uniom   all  
  select   a.bmbh,a.je-b.je,a.rq,'上午'   as   ppp    
  from   #temp2   a,  
      (select   bmbh,sum(je*(case   when   djlb=1   then   1   else   -1   end)),                    
          convert(varchar(10),rq,120))     as   rq    
        from   zpmx    
          where   datepart(hh,rq)>=12   group   by   bmbh,convert(varchar(10),rq,120))   b  
   
  where   a.bmbh=b.bmbh   and   convert(varchar(10),a.rq,120)=convert(varchar(10),b.rq,120)Top

3 楼j9988(j9988)回复于 2002-11-16 18:30:04 得分 0

如果有那一天没发生的话,就用LEFT   JION   加a.je-ISNULL(b.je,0)Top

4 楼leimin(黄山光明顶)回复于 2002-11-16 19:08:12 得分 0

楼上的,写的真快.  
  楼主好像是魔法门英雄无敌的爱好者,我也喜欢!Top

相关问题

  • 指点迷津
  • 指点迷津
  • 望指点迷津
  • 请高手指点迷津.
  • 高手指点迷津!!!!!
  • 请高手指点迷津
  • 请各位指点迷津!!
  • 高手请指点迷津...
  • 请各位指点迷津
  • 请高手指点迷津!!!

关键词

  • rq
  • bmbh
  • je
  • varchar
  • 金额
  • li
  • 统计
  • datetime
  • convert
  • 编号

得分解答快速导航

  • 帖主:ewchf
  • j9988

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo