database/oracle

행을 열로 정렬

아이짱구 2009. 2. 5. 15:37

CO001T 테이블은 코드 테이블로 하나의 MAJOR 코드에 대하여 최대 3개의 MINOR 코드를 가질 수 있다. 우리는 보고자 하는 것은 각 MAJOR 코드에 대하여 MINOR 코드 를 가로로 정렬하여 보고자 한다. 이때 MINOR 코드가 3개가 아닌 경우에 나머지는 공백으로 둔다.

테이블 생성 스크립트

CREATE TABLE CO001T (
  MAJOR  VARCHAR2 (6),
  MINOR  VARCHAR2 (10)
);

-------------------------------------------

SELECT
       A.MAJOR,
       MAX(DECODE(R-R1, 0, MINOR))MINOR1,
       MAX(DECODE(R-R1, 1, MINOR))MINOR2,
       MAX(DECODE(R-R1, 2, MINOR))MINOR3
  FROM (SELECT ROWNUM R,
               MAJOR,
               MINOR
          FROM C0001T
       ) A,
       (SELECT MIN(ROWNUM)R1,
               MAJOR
          FROM C0001T
         GROUP BY MAJOR
       ) B
 WHERE A.MAJOR = B.MAJOR
 GROUP BY A.MAJOR