본문 바로가기

Database/SQL

[oracle] PIVOT, UNPIVOT

pivot은 행 > 열으로 바꾸는 것이고, unpivot은 열 > 행으로 바꾸는 것이다.

대리님이 그래서 pivot이 뭐냐고 해서 잘 대답했는데 뜻만 알면 뭐하냐고 적용을 못하는데 ㅠ

반나절동안 고민하다가 아래 참고 글을 보고 드디어 이해했다.


예제

WITH 성적 AS
  (
  SELECT '마농' 이름, 80 국어, 90 영어, 90 수학 FROM dual
  UNION ALL SELECT '마뇽', 90, 80, 70 FROM dual
  UNION ALL SELECT '만옹', 80, 80, 80 FROM dual
  UNION ALL SELECT '만용', 60, 60, 60 FROM dual
  )
SELECT *
FROM 성적
UNPIVOT (점수 FOR 과목 IN (국어, 영어, 수학))
PIVOT (MIN(점수) FOR 이름 IN ('마농', '마뇽', '만옹', '만용'))

수많은 글에서 C,V,VAL 이게 대체 그래서 뭔지 하나도 몰랐는데 점수, 과목, 과목명을 보고 포함관계를 이해했다.

WITH TMP AS
(SELECT COL1, COL2, COL3 
FROM TABLE1)
SELECT *
FROM TMP
PIVOT ( [집계함수] FOR [대상컬럼명] IN [컬럼이 될 값] )
UNPIVOT ( [집계될 데이터의 컬럼명] FOR [unpivot할 컬럼 데이터의 컬럼명] IN [unpivot할 컬럼명] )

마농님 감사합니다.

 

<!--참고 글 링크--!>

http://heuristicset.blogspot.com/2017/08/pivot-unpivot.html

https://ggmouse.tistory.com/128

반응형