안녕하세요..
도저히 답을 찾지 못하고, 도움을 청하게 되었습니다.
저희가 사용하는 DB는 Oracle 11g 이구요
아래 왼쪽표에 있는 값을 오른쪽 표와 같이 구현하고 싶은데요.
고수님들 도움을 청하고자 합니다.
SEQ | COL | NO | COL1 | NO1 | COL2 | NO2 | |
1 | AAA | 3 | AAA | 3 | BBB | 8 | |
2 | BBB | 8 | CCC | 10 | DDD | 11 | |
3 | CCC | 10 | EEE | 14 | FFF | 17 | |
4 | DDD | 11 | 오른쪽 표로 변경 | GGG | 19 | HHH | 22 |
5 | EEE | 14 | III | 23 | JJJ | 24 | |
6 | FFF | 17 | KKK | 26 | |||
7 | GGG | 19 | |||||
8 | HHH | 22 | |||||
9 | III | 23 | |||||
10 | JJJ | 24 | |||||
11 | KKK | 26 |
seq 가 빈값이 없이 촘촘하다면? seq 를 그대로 이용하시면 되고
그게 아니라면 seq 를 이용해 순번을 다시 만들어 사용하셔야 합니다.
WITH t AS ( SELECT 1 seq, 'AAA' col, 3 no FROM dual UNION ALL SELECT 2, 'BBB', 8 FROM dual UNION ALL SELECT 3, 'CCC', 10 FROM dual UNION ALL SELECT 4, 'DDD', 11 FROM dual UNION ALL SELECT 5, 'EEE', 14 FROM dual UNION ALL SELECT 6, 'FFF', 17 FROM dual UNION ALL SELECT 7, 'GGG', 19 FROM dual UNION ALL SELECT 8, 'HHH', 22 FROM dual UNION ALL SELECT 9, 'III', 23 FROM dual UNION ALL SELECT 10, 'JJJ', 24 FROM dual UNION ALL SELECT 11, 'KKK', 26 FROM dual ) SELECT MIN(DECODE(x, 1, col)) col1 , MIN(DECODE(x, 1, no)) no1 , MIN(DECODE(x, 2, col)) col2 , MIN(DECODE(x, 2, no)) no2 FROM (SELECT col, no , CEIL(rn / 2) y , MOD(rn - 1, 2) + 1 x FROM (SELECT col, no , ROW_NUMBER() OVER(ORDER BY seq) rn FROM t ) ) GROUP BY y ORDER BY y ;