안녕하세요 통계쿼리 짜는데 도와주세요!! 0 3 579

by soohoin12 [Oracle 기초] [2017.12.10 03:31:39]


구분년월      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의 좋은 기능이 있다면 그것도 알려 주시면 감사감사 ㅠ ) 
 

by soohoin12 [2017.12.10 21:27:39]

^^ connect by 로 반복문 돌려서 완성 했습니다 !! 
읽어주신분들 감사합니다!! 

혹시라도 ㅎ 지나가다 보시면  다른 좋은 방법이나 조언 부탁드립니다.

 


by 마농 [2017.12.11 08:26:41]

중간 결과물을 가지고 질문하시는 것보다는
원본을 가지고 질문하시는게 더 좋습니다.
중간결과물을 가공하는 과정도 있었을 것이고
중간결과물을 가지고 최종 결과물을 만들어 내야 하는데.
이게 원본에서 직접 뽑는거보다 오히려 더 복잡할 수도 있습니다.


by 마농 [2017.12.11 11:20:55]
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
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입