728x90
만약에 테이블에서 행값을 컬럼으로 주고 그것에 해당하는 값들을 집계를 구하여 표현하고 싶다면 PIVOT 함수를 사용하면 된다. 아래의 예제를 살펴보자
1. PIVOT 함수 예제
NAME이라는 열의 속성들을 컬럼으로 바꾸고 그것에 해당하는 ITEM1 값들을 그룹화하여 집계를 내는 예제이다. 위의 사진 처럼 표현하기 위해서는 PIVOT함수를 사용하면 쉽게 표현 할 수 있다.
2. PIVOT 함수 사용방법
PIVOT을 사용하기 위해서는 아래의 코드를 작성하면 된다.
SELECT *
FROM (피벗할 쿼리) AS A
PIVOT (집계함수(집계컬럼) FOR 피벗컬럼 IN ([피벗컬럼값]...)) AS B
코드를 살펴보도록 하자
- 먼저 하위쿼리에 PIVOT함수를 적용한 쿼리를 작성하면 된다.
- 그런다음 피벗에 필요한 쿼리를 작성해주고 PIVOT에서 집계 할 컬럼을 집계함수로 표현해준다.
- 피벗컬럼을 넣고 피벗컬럼값을 [ ] 에 넣어 사용해주어야 한다. (여기서 피벗컬럼값은 원하는것만 작성해 줄 수 있다.)
- 추가로 PIVOT절의 별칭(위에서는 AS A, AS B 처럼 사용)은 필수로 넣어줘야 한다.
3. 예제처럼 실행하기
맨 처음 보여주었던 예제를 나타내기 위해서는 아래와 같이 작성하면 된다.
SELECT *
FROM (SELECT ITEM1, NAME FROM TEST) AS A
PIVOT (SUM(ITEM1) FOR NAME IN ([Joe],[Bot],[Kaite],[Jessy],[Sia])) AS B
먼저 하위쿼리에 PIVOT을 작성하면 되는데 우리가 필요한 ITEM1과 NAME을 먼저 SELECT 해준다음 PIVOT에서 집계 할 ITEM1을 SUM함수로 적어주고 피벗컬럼인 NAME과 피벗컬럼값을 대괄호로 묶어 나타내준다. 처음 여기서는 테이블에 있는 모든 NAME 속성들을 작서해주겠다. 그러면 위의 사진 처럼 행과 열이 바뀐 모습으로 나타난다.
만약 여기서 나는 컬럼에 Joe와 Bot만 나타내고 싶다면 이렇게 작성하면 된다.
SELECT *
FROM (SELECT ITEM1, NAME FROM TEST) AS A
PIVOT (SUM(ITEM1) FOR NAME IN ([Joe],[Bot])) AS B
그러면 이런식으로 Joe와 Bot만 나타나게 된다.
이렇게 간단하게 pivot으로 행과 열을 바꿔보도록 하였다.
728x90
'데이터베이스 > MSSQL' 카테고리의 다른 글
[MSSQL] 그룹별로 문자열 묶어서 나타내기(STRING_AGG / STUFF, FOR XML PATH) (1) | 2024.09.24 |
---|---|
[MSSQL] UNION 다루기 (0) | 2024.09.19 |
[MSSQL] CASE문 다루기 (0) | 2024.08.30 |
[MSSQL] 데이터베이스 백업/복원하기 & 복원 에러 해결 (0) | 2024.08.20 |
[MSSQL] 여러 조건으로 UPDATE 시키기 (UPDATE SET CASE...) (0) | 2024.08.19 |