Dev::DB/Oracle
ROW 를 COL 으로 변환
isfry
2009. 7. 30. 11:26
최근들어 SQL를 해보면서
[TEST_TABLE]
하나의 키(SEQNO)를 기준으로 여러개의 Row가 나올 때
조건에 따라서 Row를 각 키의 컬럼으로 돌려야 할 경우가 종종 생겼다.
이런 방법으로 해주면 쉽게 바꿀 수 있다.
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
# 더 효율적인 방법을 아시는 분은 가르침을 부탁드립니다.
[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
# 더 효율적인 방법을 아시는 분은 가르침을 부탁드립니다.