2015 | 11 | A |
2015 | 11 | B |
2015 | 11 | C |
2015 | 11 | D |
2015 | 12 | E |
2015 | 12 | F |
2015 | 12 | G |
2015 | 12 | H |
2016 | 01 | I |
2016 | 01 | K |
이런식의 데이터를
2015 | 11 | A | 2015 | 12 | E | 2016 | 01 | I | |
2015 | 11 | B | 2015 | 12 | F | 2016 | 01 | K | |
2015 | 11 | C | 2015 | 12 | G | ||||
2015 | 11 | D | 2015 | 12 | H |
이런식으로 바꾸고 싶은데 어떤식으로 접근해야하나요?? 생각이 잘되지 않습니다.
WITH t AS ( SELECT '2015' yyyy, '11' mm, 'A' v FROM dual UNION ALL SELECT '2015', '11', 'B' FROM dual UNION ALL SELECT '2015', '11', 'C' FROM dual UNION ALL SELECT '2015', '11', 'D' FROM dual UNION ALL SELECT '2015', '12', 'E' FROM dual UNION ALL SELECT '2015', '12', 'F' FROM dual UNION ALL SELECT '2015', '12', 'G' FROM dual UNION ALL SELECT '2015', '12', 'H' FROM dual UNION ALL SELECT '2016', '01', 'I' FROM dual UNION ALL SELECT '2016', '01', 'K' FROM dual ) SELECT * FROM (SELECT yyyy, mm, v , DENSE_RANK() OVER(ORDER BY yyyy, mm) dr , ROW_NUMBER() OVER(PARTITION BY yyyy, mm ORDER BY v) rn FROM t ) PIVOT (MIN(yyyy) y, MIN(mm) m, MIN(v) v FOR dr IN (1, 2, 3)) ORDER BY rn ;
WITH t AS ( SELECT '2015' yyyy, '11' mm, 'A' v FROM dual UNION ALL SELECT '2015', '11', 'B' FROM dual UNION ALL SELECT '2015', '11', 'C' FROM dual UNION ALL SELECT '2015', '11', 'D' FROM dual UNION ALL SELECT '2015', '12', 'E' FROM dual UNION ALL SELECT '2015', '12', 'F' FROM dual UNION ALL SELECT '2015', '12', 'G' FROM dual UNION ALL SELECT '2015', '12', 'H' FROM dual UNION ALL SELECT '2016', '01', 'I' FROM dual UNION ALL SELECT '2016', '01', 'K' FROM dual ) SELECT rn , MIN(DECODE(dr, 1, yyyy)) y_1 , MIN(DECODE(dr, 1, mm )) m_1 , MIN(DECODE(dr, 1, v )) v_1 , MIN(DECODE(dr, 2, yyyy)) y_2 , MIN(DECODE(dr, 2, mm )) m_2 , MIN(DECODE(dr, 2, v )) v_2 , MIN(DECODE(dr, 3, yyyy)) y_3 , MIN(DECODE(dr, 3, mm )) m_3 , MIN(DECODE(dr, 3, v )) v_3 FROM (SELECT yyyy, mm, v , DENSE_RANK() OVER(ORDER BY yyyy, mm) dr , ROW_NUMBER() OVER(PARTITION BY yyyy, mm ORDER BY v) rn FROM t ) GROUP BY rn ORDER BY rn ;