
Ein Beispiel: Der folgende Output ist erwünscht:
DEPTNO SUM(CLERK) SUM(SALESMAN) SUM(MANAGER) ---------- ---------- ------------- ------------ 30 950 5600 2850 20 1900 2975 10 1300 2450
Wie bekommt man das hin? Ganz einfach in zwei Schritten:
- Zunächst wird die EMP-Tabelle "gekippt". Die einzelnen Werte der Spalte JOB (SALESMAN,CLERK,MANAGER) sollen neue Spalten der Pivot-Tabelle werden:
select deptno, clerk, salesman, manager from emp pivot ( sum(sal) for JOB in ('CLERK' as "CLERK", 'SALESMAN' as "SALESMAN", 'MANAGER' as "MANAGER") ) DEPTNO CLERK SALESMAN MANAGER ---------- ---------- ---------- ---------- 10 2450 30 950 30 1250 20 2975 30 2850 10 20 20 20 1100 30 1500 20 800 30 1600 30 1250 10 1300
- Dann nur noch nach DEPTNO summieren:
select deptno, sum(clerk), sum(salesman), sum(manager) from emp pivot ( sum(sal) for JOB in ('CLERK' as "CLERK", 'SALESMAN' as "SALESMAN", 'MANAGER' as "MANAGER") ) group by deptno DEPTNO SUM(CLERK) SUM(SALESMAN) SUM(MANAGER) ---------- ---------- ------------- ------------ 30 950 5600 2850 20 1900 2975 10 1300 2450
Man sieht also: Kreuztabellen sind in Oracle11g einfach nur ... einfach!