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

posted on 2009-03-13 09:52  Oracle  阅读(3332)  评论(0编辑  收藏  举报