by 손님 [2012.06.18 22:25:57]
행을 열로 바꾸는 방법은
1. 11g 의 Pivot 이나
2. 10g 이하에서는 Group By 와 Min(Decode()) 를 함께 사용하는 방법이 있습니다.
일단 위 쿼리만으로는 데이터를 알 수 없네요.
데이터를 봐야 어떻게 작성해야 할지를 알 수 있습니다.
1. b 의 정해진 값에 따라 컬럼을 분리할지?
2. 값에 의한 분리가 불가능하면 순번을 붙여서 분리할지?
3. 순번의 갯수가 고정적인지 가변적인지?
행은 가변적이지만 열은 고정적입니다.
SQL만으로는 열을 가변적으로 표시할 수는 없습니다.
1. 프로그램에서 SQL 문장을 동적으로 구성하는 방법
2. 컬럼의 최대 갯수를 정해놓고 SQL을 작성하는 방법
SELECT deptno, dname , MIN(DECODE(rn, 1, empno)) empno_1 , MIN(DECODE(rn, 1, ename)) ename_1 , MIN(DECODE(rn, 1, sal)) sal_1 , MIN(DECODE(rn, 2, empno)) empno_2 , MIN(DECODE(rn, 2, ename)) ename_2 , MIN(DECODE(rn, 2, sal)) sal_2 , MIN(DECODE(rn, 3, empno)) empno_3 , MIN(DECODE(rn, 3, ename)) ename_3 , MIN(DECODE(rn, 3, sal)) sal_3 , MIN(DECODE(rn, 4, empno)) empno_4 , MIN(DECODE(rn, 4, ename)) ename_4 , MIN(DECODE(rn, 4, sal)) sal_4 , MIN(DECODE(rn, 5, empno)) empno_5 , MIN(DECODE(rn, 5, ename)) ename_5 , MIN(DECODE(rn, 5, sal)) sal_5 FROM ( SELECT d.deptno, d.dname , e.empno, e.ename, e.sal , ROW_NUMBER() OVER(PARTITION BY d.deptno ORDER BY e.empno) rn FROM dept d, emp e WHERE d.deptno = e.deptno ) GROUP BY deptno, dname ORDER BY deptno, dname ;