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 |
| 昵称 密码 游客无需密码 |
| 网址 电邮 注册 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |







