分类(Oracle)
Oracle中rollup的使用介绍
2009/03/02 09:54

rollup   配合   goup   by   命令使用,可以提供信息汇总功能(类似于"小计")
文章出处:http://www.diybl.com/course/7_databases/oracle/oraclejs/2008224/101034.html

 

SQL>   select   job,deptno,sal   from   emp;  
   
  JOB                     DEPTNO               SAL  
  ---------   ---------   ---------  
  CLERK                         20               800  
  SALESMAN                   30             1600  
  SALESMAN                   30             1250  
  MANAGER                     20             2975  
  SALESMAN                   30             1250  
  MANAGER                     30             2850  
  MANAGER                     10             2450  
  ANALYST                     20             3000  
  PRESIDENT                 10             5000  
  SALESMAN                   30             1500  
  CLERK                         20             1100  
  CLERK                         30               950  
  ANALYST                     20             3000  
  CLERK                         10             1300  
   
  已选择14行。  
   
  SQL>   select   job,deptno,sum(sal)   total_sal   from   emp   group   by   rollup(job,deptno);  
   
  JOB                     DEPTNO   TOTAL_SAL  
  ---------   ---------   ---------  
  ANALYST                     20             6000  
  ANALYST                                     6000  
  CLERK                         10             1300  
  CLERK                         20             1900  
  CLERK                         30               950  
  CLERK                                         4150  
  MANAGER                     10             2450  
  MANAGER                     20             2975  
  MANAGER                     30             2850  
  MANAGER                                     8275  
  PRESIDENT                 10             5000  
  PRESIDENT                                 5000  
  SALESMAN                   30             5600  
  SALESMAN                                   5600  
                                                  29025  
   
  已选择15行。  
   
  SQL> 

======================================
再小小地加工一下...............................
======================================

SELECT
 CASE WHEN A.JOB IS NULL AND A.DEPTNO IS NULL THEN '汇总'
         WHEN A.JOB IS NOT NULL AND  A.DEPTNO IS NULL THEN A.JOB ||  '小计'
 ELSE A.JOB END JOB,
 CASE WHEN  A.DEPTNO IS NULL THEN '/' ELSE TO_CHAR(A.DEPTNO) END DEPTNO,
 SUM(A.SAL) TOTAL_SAL
  FROM EMP A
 WHERE A.JOB IS NOT NULL
 GROUP BY ROLLUP(JOB, DEPTNO);

======================================

JOB DEPTNO TOTAL_SAL
CLERK 10 1300
CLERK 20 1900
CLERK 30 950
CLERK小计 / 4150
ANALYST 20 6000
ANALYST小计 / 6000
MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
MANAGER小计 / 8275
SALESMAN 30 5600
SALESMAN小计 / 5600
PRESIDENT 10 5000
PRESIDENT小计 / 5000
汇总 / 29025

Tags: Oracle
相关日志:
+引用(0) |
发表评论
昵称  密码  游客无需密码
网址  电邮  注册
验证码 请输入左侧图片中的字符
记住我