본문 바로가기

프로그램 경험/Database

[SqlServer] PIVOT 기능 사용하기(행열 변환)

PIVOT 기능 사용하기(행열 변환) - SqlServer



행을 열로 변환 할때 사용하는 기능입니다. 

실무에서 년월단위로 데이터가 입력된 경우에 빈번하게 사용하게 됩니다. 

운동 계획을 예로 들어봤습니다.


--임시 테이블을 생성
DECLARE @Temp TABLE 
(
 Field        VARCHAR(10)        --구분
 ,PlanYYMM      VARCHAR(6)        --계획월
 ,PlanQty      INT                --계획수량
);

--데이터를 월단위로 입력한다.
INSERT INTO @Temp VALUES('벤치프레스','201401', 20);
INSERT INTO @Temp VALUES('벤치프레스','201402', 30);
INSERT INTO @Temp VALUES('벤치프레스','201403', 40);
--케틀벨을 월단위로 100개씩 증가..ㄷㄷ
INSERT INTO @Temp VALUES('케틀벨','201401', 100);
INSERT INTO @Temp VALUES('케틀벨','201402', 200);
INSERT INTO @Temp VALUES('케틀벨','201403', 300);

--기본으로 조회 해보면 당연히 값들이 행단위로 표시
SELECT 
*
FROM @Temp;

--PIVOT 기능을 사용하여 행을 열로 변환 
SELECT 
*
FROM
(
    SELECT     
        Field
      , PlanYYMM
      , PlanQty
    FROM @Temp
)AS A
PIVOT
(
    --SUM 이나 COUNT로 집계를 해야 한다.
    SUM(A.PlanQty)
    FOR PlanYYMM IN ([201401],[201402],[201403])
    --이때 년월을 대괄호로 감싸야 한다.
) AS B

간단하죠?