우리가 많이 알고 있는 pivot 쿼리는 주로 row 형태를 column의 형태로 바꾸는, 굳이 이름을 붙이자면 row-to-column 쿼리이다.
여기에서는 반대로 column-to-row pivot 쿼리를 만들어 본다.
아래 scott.dept 테이블이 있다.
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
이것을 아래 형태로 바꾸는 것이다.
10
ACCOUNTING
NEW YORK
20
RESEARCH
DALLAS
30
SALES
CHICAGO
40
OPERATIONS
BOSTON
쿼리는 아래와 같다.
오라클 버전에 따라 정렬을 다시 해줘야 할 수도 있다.
SELECT DECODE (MOD (ROWNUM - 1, 3) + 1, 1, TO_CHAR (deptno), 2, dname, 3, loc)
FROM (SELECT 1
FROM DUAL
CONNECT BY LEVEL <= 3), dept
위의 결과를 약간 더 응용해 보자.
scott.emp 테이블을 아래와 같이 쿼리하면,
SELECT ename ename1, empno empno1, job ename2, mgr empno2
FROM emp
결과는 아래와 같다.
ENAME1 EMPNO1 ENAME2 EMPNO2
SMITH 7,369 CLERK 7,902
ALLEN 7,499 SALESMAN 7,698
WARD 7,521 SALESMAN 7,698
JONES 7,566 MANAGER 7,839
MARTIN 7,654 SALESMAN 7,698
BLAKE 7,698 MANAGER 7,839
CLARK 7,782 MANAGER 7,839
SCOTT 7,788 ANALYST 7,566
KING 7,839 PRESIDENT
TURNER 7,844 SALESMAN 7,698
ADAMS 7,876 CLERK 7,788
JAMES 7,900 CLERK 7,698
FORD 7,902 ANALYST 7,566
MILLER 7,934 CLERK 7,782
이것을 아래와 같이 두개의 컬럼씩 번갈아서 나오도록 해보자.
ENAME EMPNO
SMITH 7,369
CLERK 7,902
ALLEN 7,499
SALESMAN 7,698
WARD 7,521
SALESMAN 7,698
JONES 7,566
MANAGER 7,839
MARTIN 7,654
SALESMAN 7,698
BLAKE 7,698
MANAGER 7,839
CLARK 7,782
.......
.......
.......
쿼리는 아래와 같다.
SELECT DECODE (MOD (ROWNUM - 1, 2) + 1, 1, ename, 2, job) ename,
DECODE (MOD (ROWNUM - 1, 2) + 1, 1, empno, 2, mgr) empno
FROM (SELECT 1
FROM DUAL
CONNECT BY LEVEL <= 2), emp
나름대로 응용해 본 예제는 아래 페이지에서 찾을 수 있다.
http://www.orafaq.com/forum/t/58454/78939/