구분년월 col1 col2 col3 col4 col5
201701 1 2 1 5 3
201702 0 1 1 3 0
201703 2 2 3 4 1
201704 0 1 0 3 4
201705 2 3 1 1 2
201706 1 0 1 0 3
.................................
데이터를 위의 예시처럼 12개월을 뽑았습니다.
그런데 저 데이터의 행과 열을 바꿔야 합니다
1월 2월 3월 4월 5월 .....................
co1
co2
co3
col4
col5
위에 처럼 뽑고 싶습니다
1. 테이블은 하나입니다.
2. 테이터를 select하는데 사용한 컬럼은 col1 , col2, col3 은 하나의 컬럼으로 1 or 2 or 3 일때 나온 값이구요
3. 나머지 col4 와 col5 는 각자 따른 컬럼을 이용해서 select했습니다.
4. pivot 사용한 것과 case 를 사용한 방법 다 알려주시면 너무너무 감사할 것 같습니다 ^^!!!
내일까지 마무리 해야 하는데 ㅠㅠ 하다하다 능력이 부족해서 이렇게 올립니다.
oracle 이지만 ansi 쿼리로 짜고 있습니다.( oracle의 좋은 기능이 있다면 그것도 알려 주시면 감사감사 ㅠ )
WITH t AS ( SELECT '201701' ym, 1 c1, 2 c2, 1 c3, 5 c4, 3 c5 FROM dual UNION ALL SELECT '201702', 0, 1, 1, 3, 0 FROM dual UNION ALL SELECT '201703', 2, 2, 3, 4, 1 FROM dual UNION ALL SELECT '201704', 0, 1, 0, 3, 4 FROM dual UNION ALL SELECT '201705', 2, 3, 1, 1, 2 FROM dual UNION ALL SELECT '201706', 1, 0, 1, 0, 3 FROM dual ) SELECT * FROM (SELECT TO_NUMBER(SUBSTR(ym, 5, 2)) m , c1, c2, c3, c4, c5 FROM t ) UNPIVOT (v FOR gb IN (c1, c2, c3, c4, c5)) PIVOT (SUM(v) FOR m IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)) ORDER BY gb ;