글쓴이 : 김홍선
pivot 쿼리란 row의 형태로 주어지는 데이타를 column의 형태로 보여주는 쿼리이다. 예를 들어, 아래와 같이 scott.emp 테이블이 주어졌다고 하면,
EMPNO ENAME DEPTNO ----------------------- 7369 SMITH 20 7499 ALLEN 30 7521 WARD 30 7566 JONES 20 7654 MARTIN 30 7698 BLAKE 30 7782 CLARK 10 7788 SCOTT 20 7839 KING 10 7844 TURNER 30 7876 ADAMS 20 7900 JAMES 30 7902 FORD 20 7934 MILLER 10
위 테이블에서, 한 row는 해당 deptno에 속하는 한 명의 사원(employee)을 나타낸다. 이 테이블에서 각 deptno에 속하는 사원의 수를 다음과 같이 출력하고자 한다면,
DEPTNO_10 DEPTNO_20 DEPTNO_30 ------------------------------- 3 5 6
쿼리를 아래와 같이 만들어 준다.
SELECT COUNT (DECODE (deptno, 10, 1)) deptno_10, COUNT (DECODE (deptno, 20, 1)) deptno_20, COUNT (DECODE (deptno, 30, 1)) deptno_30 FROM emp
pivot 쿼리의 특징 중의 하나는 select 절에 count(decode(...)), sum(decode(...)), max(decode(...)) 등의 함수를 많이 쓴다는 것이다.
예제 추가)
아래와 같이 deptno 별로 clerk, salesman, manager의 수가 나타나도록 쿼리를 만들어보자. (여기서도 emp 테이블을 사용한다.)
DEPTNO CLERK SALESMAN MANAGER ---------- ---------- ---------- ---------- 10 1 0 1 20 2 0 1 30 1 4 1
쿼리는 아래와 같다.
SELECT deptno , COUNT (DECODE (job, 'CLERK', 1)) clerk , COUNT (DECODE (job, 'SALESMAN', 1)) salesman , COUNT (DECODE (job, 'MANAGER', 1)) manager FROM emp GROUP BY deptno
위에서 예를 든 것과 같이 row 형태의 데이타를 column 형태로 보여주는 쿼리를 row-to-column pivot 쿼리라고 하고, 그 반대로 column 형태를 row 형태로 보여주는 쿼리를 column-to-row pivot 쿼리라고 하자.
column-to-row pivot 쿼리의 예는 아래 페이지에서 확인할 수 있다. - http://www.soqool.com/servlet/board?cmd=view&cat=100&subcat=1010&seq=77
| |