经典SQL之数据统计

有两表:表v记录各id进出的数量(进为正,出为负),表b记录各id的余数。


表v                                                    表b
id    rq                  进出数      ctc           id      rq                  余数     ctc
1     2004-05-10    100          11            1      2004-05-10    100       11
1     2004-05-15    -20           11            1      2004-05-15    80        11
2     2004-05-10    200          11            2      2004-05-10    200       11
2     2004-05-12    50            11            2      2004-05-12    250       11 
2     2004-06-02    -100         11            2      2004-06-02    150       11
3     2004-05-12    50            13            3      2004-05-12     50        13
3     2004-05-20    -10           13            3      2004-05-20     40        13 

现在想统计某一时间段rq1至rq2内不同点ctc各天的进数、出数、余数
比如要得到2004-05-10至2004-05-20之间每一ctc各天的变化结果,如下:
ctc       rq                  进                          出                             余数
                   (进出数正值之和)  (进出数负值之和)    (id对应b表最大日期的余数之和)

11    2004-05-10       300                          0                              300 
11    2004-05-12        50                           0                              350
11    2004-05-15         0                           20                             330
13    2004-05-12        50                           0                              50
13    2004-05-20         0                           10                             40


答案(csdn邹建做答)

--查询参数定义
declare @dt1 datetime,@dt2 datetime
select @dt1='2004-05-12',@dt2='2004-05-20'

--查询语句
select ctc,rq=convert(char(10),rq,120)
 ,进=sum(case when 进出数>0 then 进出数 else 0 end)
 ,出=-sum(case when 进出数<0 then 进出数 else 0 end)
 ,余数=(
  select sum(余数)
  from b join(
   select id,rq=max(rq) from b
   where ctc=v1.ctc and rq <=v1.rq
    and exists(
     select 1 from v
     where ctc=v1.ctc and id=b.id
      and rq <=v1.rq)
   group by id
  )a on a.id=b.id and a.rq=b.rq)
from v v1
where rq between @dt1 and @dt2
group by ctc,rq
order by ctc,rq

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值