oracle 中grouping

本文演示了如何使用SQL的GROUP BY ROLLUP进行数据分组,并结合CASE WHEN语句实现不同类型的数据汇总,包括子总计与总总计,通过具体实例展示了查询结果的排序方式。

select * from test

1 00 001 大 5 15
2 00 001 中 25 75
3 00 001 小 85 25
4 00 002 大 65 35
5 00 002 中 95 85
6 00 002 小 85 25
7 01 001 大 16 14
8 01 001 中 290 75
9 01 001 小 83 22

 

 


SELECT num
      ,flg
      ,(CASE WHEN GROUPING(num)=1 THEN 'TOTAL' 
             WHEN GROUPING(type)=1 THEN 'SUBTOTAL' 
             ELSE type 
        END)
      ,sum(number1)
      ,sum(number2)
  FROM test 
GROUP BY ROLLUP(num,flg,type)
ORDER BY num NULLS LAST,flg,DECODE(type,'大',1,'中',2,'小',3,4);

 

 

1 00 001 大 5 15
2 00 001 中 25 75
3 00 001 小 85 25
4 00 001 SUBTOTAL 115 115
5 00 002 大 65 35
6 00 002 中 95 85
7 00 002 小 85 25
8 00 002 SUBTOTAL 245 145
9 00  SUBTOTAL 360 260
10 01 001 大 16 14
11 01 001 中 290 75
12 01 001 小 83 22
13 01 001 SUBTOTAL 389 111
14 01  SUBTOTAL 389 111
15   TOTAL 749 371


本文转自茄子_2008,原文链接:http://www.cnblogs.com/xd502djj/archive/2010/09/21/1832195.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值