본문 바로가기

Dev::DB/Oracle

ROW 를 COL 으로 변환

최근들어 SQL를 해보면서 

[TEST_TABLE]
   SEQNO TFLAG  TCODE  TNAME 
 1  2  1   2TC1   2TN1 
 2  2  2  2TC2  2TN2
 3  5  1  5TC1  5TN1
 4  5  2  5TC2  5TN2
 5  7  2  7TC2  7TN2

하나의 키(SEQNO)를 기준으로 여러개의 Row가 나올 때
조건에 따라서 Row를  각 키의 컬럼으로 돌려야 할 경우가 종종 생겼다.

  SEQNO  TCODE1   TNAME1  TCODE1   TNAME2
 1  2  2TC1 2TN1   2TC2  2TN2 
 2  5  5TC1 5TN1  5TC2  5TN2 
 3  7      7TC2  7TN2 

이런 방법으로 해주면 쉽게 바꿀 수 있다.

SELECT SEQNO,
             MIN(DECODE(TFLAG, 1, TCODE)) TCODE1,
             MIN(DECODE(TFLAG, 1, TNAME)) TNAME1,
             MIN(DECODE(TFLAG, 2, TCODE)) TCODE2,
             MIN(DECODE(TFLAG, 2, TNAME)) TNAME2
  FROM TEST_TABLE
 WHERE TFLAG IN (1, 2)
 GROUP BY SEQNO

# 더 효율적인 방법을 아시는 분은 가르침을 부탁드립니다.