상세 컨텐츠

본문 제목

[MSSQL] PIVOT을 이용하여 행을 열로 변환, 통계 자료 나타내기

SQL

by dajingjing 2022. 3. 29. 15:14

본문

아래는 샘플로 만들어본 테이블인데, 상품 금액 그리고 날짜로 이루어져있다.

SAMPLE_TABLE

↓ 위 테이블을 결론적으로 아래와 같이 나타내고자 한다 (월별 상품 금액 합계)

RESULT_TABLE

PIVOT을 이용해서 각 상품의 합계를 월별로 집계한 것이다.

 

 

먼저, 첫번째 SAMPLE_TABLE에서 날짜를 월로 바꾸는 SQL을 만들었다.

 

SELECT 상품, 금액, SUBSTRING(CONVERT(CHAR(16), 날짜, 120), 1, 7) 년월 

FROM SAMPLE_TABLE

DATE를 YYYY-MM 으로 변환

위 SQL을 실행하여 나온 테이블이다. 여기서 년월 행을 열로 바꿔주는 PIVOT을 사용할 것이다.

중복되는 값이 있는 경우 하나의 열로 만들어주어야 하기 때문에 집계 기준이 필요하다.

예를들어, 위 테이블에서 5번줄과 6번줄은 B 상품이 2022-02에 두번 등장한다.

 

나는 각 상품 금액의 합을 구하기 위해 아래와 같이 SQL을 만들었다.

SELECT *

FROM 테이블명

PIVOT ( 함수(컬럼명) FOR 각 열로 만들어줄컬럼 IN ([각 컬럼이름이 될 값]) ) AS PVT(테이블명)

빨간 네모 박스 : 처음에 만든 쿼리를 서브쿼리로 FROM 절에 넣어줌.

  (DATE 타입을 YYYY-MM 형식으로 변경한 쿼리를 FROM 절의 서브쿼리로 넣어서 위와 같이 작성했다.)

값이였던 날짜가 테이블의 열로 변경됨

 

 

위 상태에서 2022-01 숫자로 되어있는 컬럼명칭을 2022년 1월로 바꾸고, NULL 값은 0으로 되게 처리했다.

 

RESULT_TABLE

처음에 만들고자 했던 결과를 완성했다.

관련글 더보기