PIVOT

PIVOT의 사전적 의미는 축을 중심으로 회전(선회축)한다는 의미이다.

SQL적으로 보면 컬럼을 반시계 방향으로 회전해서 각각의 컬럼으로 사용하겠다는 것을 뜻한다.


그림으로  표현하면 이렇지 않을까?ㅋㅋㅋ


피벗테이블을 사용하는 이유는 다음과 같다.


데이터를 요약, 분석, 탐샙 및 표시하기 위해서

필요한 데이터만 뽑아서 새롭게 테이블을 작성하기 위해서

목록을 단순한 형태로 요약하기 위해서


위의 예는 엑셀에서 피벗테이블을 사용하는 방법인데 SQL에서도 이유는 비슷할것이다.

피벗 문법에서 집계함수를 사용하는것도 이와 같은 이유때문이다.

문법

PIVOT 

집계함수(컬럼명) --오른쪽으로 회전할 컬럼명(같은 그룹끼리 집계)

FOR [위로 올릴 컬럼] IN (FOR에서 사용한컬럼명중 사용할 컬럼 도메인목록) 

) AS 피벗 Alias


집계함수를 사용하는 이유는 위에서 설명했다.

FOR_IN_구문은 FOR은 회전시킬 컬럼 IN 회전시킬 컬럼 도메인정도로 이해하면 된다.

이렇게 회전을 하게되면 집계함수 값들은 한 행이될것이고, 그 이외의 값은 자동으로 GROUP BY되어서 하나의 행이 만들어 진다.



UNPIVOT은 그 반대가 된다. 선택한 컬럼명들이 반대로 회전하겠지? 


UNPIVOT 

컬럼명 --왼쪽으로 회전시킨 컬럼들을 이름 지을 컬럼명

FOR [오른쪽으로 회전한후 이름지을 컬럼명]

IN (회전시킬 컬럼들) 

) AS 피벗 Alias


이제 예를 들어서 살펴보자.

예제

다음과 같은 임시테이블을 사용할 것이다.

이 테이블에서 월별로 합을 구한뒤 이를 PIVOT과 UNPIVOT으로 회전시켜볼것이다.


SUM을 구해보자



이제 PIVOT을 통하여 테이블을 회전시켜 보자


결과는 다음과 같이 나온다. MONTH의 열에 있는 값을 컬럼으로 올리고, SUM을 각 열로 둠으로써 테이블을 회전시켰다.



다음으로 UNPIVOT을 사용하여 한번더 회전 시켜보도록하자.



이처럼 테이블을 시계방향으로 계속돌리면 결과적으론 컬럼이 반대로 나온다.


PIVOT과 UNPIVOT을 동시에 사용할 일을 잘 없지만, 예제를 위해서 작성해 보았다.




참조링크 (동적쿼리와, PIVOT)

'SQL > MS-SQL' 카테고리의 다른 글

단위처리  (0) 2017.11.02
Datetime Fomat  (0) 2017.10.11
제약 조건(Constraint) #2 (기존 테이블에 추가/삭제)  (0) 2017.09.20
제약 조건(Constraint) #1 (의미와 설정)  (0) 2017.09.20
테이블변수  (0) 2017.09.20

+ Recent posts