IT/MSSQL

[MSSQL] 세로 데이터를 가로 데이터 조회 / PIVOT

!? 2024. 2. 10.


MSSQL에서 세로 데이터를 가로 데이터로 변환하는 작업은 복잡하게 느껴질 수 있지만, PIVOT이나 CASE 문과 같은 SQL의 기능을 이용하면 이 작업을 쉽게 수행할 수 있습니다. 이러한 기능들을 이용하면 원래 행 형태로 되어 있는 데이터를 열 형태로 바꿀 수 있는 것입니다.


PIVOT을 사용하는 방법에 대해 알아보겠습니다. PIVOT는 원본 테이블의 행을 열로 변환하는데 사용되는 SQL 연산자입니다. 이 연산자는 입력 테이블의 각 행에 대해 열 수가 하나인 행 집합을 생성합니다.

 

PIVOT 구문

 

PIVOT 구문은 다음과 같이 사용됩니다.

 

SELECT *
FROM
(
    -- 원본 데이터 쿼리
) AS SourceTable
PIVOT
(
    -- 집계 함수 및 피벗 열
    AggregationFunction(column_name)
    FOR PivotColumn IN ([Value1], [Value2], ..., [ValueN])
) AS PivotTable;

 

 

PIVOT 사용 예제

 

 

다음은 이를 사용한 예입니다. 우리가 다음과 같은 테이블을 가지고 있다고 가정하겠습니다.

CREATE TABLE Sales (
    Year INT,
    Quarter INT,
    Revenue DECIMAL(10, 2)
);

INSERT INTO Sales (Year, Quarter, Revenue)
VALUES
    (2021, 1, 10000),
    (2021, 2, 15000),
    (2021, 3, 12000),
    (2021, 4, 18000);

 

이 테이블에 PIVOT을 사용하여 가로 데이터로 변환하는 작업을 수행할 수 있습니다.

 

SELECT *
FROM (
    SELECT Year, Quarter, Revenue
    FROM Sales
) AS SourceTable
PIVOT (
    SUM(Revenue)
    FOR Quarter IN ([1], [2], [3], [4])
) AS PivotTable;

 

이 쿼리는 Quarter 값을 열로 변환하여 1, 2, 3, 4 분기별 매출을 가로로 표현합니다. PIVOT 구문에서는 집계 함수 (예: SUM, AVG 등)와 변환하려는 열의 값들을 명시해야 합니다.

 

PIVOT은 데이터를 변환하고 열을 동적으로 생성할 때 유용하며, 집계 함수를 활용하여 원하는 결과를 얻을 수 있습니다.

 

 

 

 

CASE 문을 사용하여 데이터를 가로로 변환하는 방법에 대해 설명하겠습니다. CASE 문은 조건에 따라 여러 개의 출력을 생성하는 SQL 문입니다.

 

CASE 사용 예제

 

CASE 문을 사용하여 직접 가로 데이터로 변환할 수도 있습니다.

 

SELECT
    Year,
    MAX(CASE WHEN Quarter = 1 THEN Revenue END) AS Q1,
    MAX(CASE WHEN Quarter = 2 THEN Revenue END) AS Q2,
    MAX(CASE WHEN Quarter = 3 THEN Revenue END) AS Q3,
    MAX(CASE WHEN Quarter = 4 THEN Revenue END) AS Q4
FROM Sales
GROUP BY Year;

 

데이터의 구조와 목적에 따라 적절한 방법을 선택해야 하며 이는 매우 중요한 부분입니다.


PIVOT을 사용하면 미리 정의된 값에 대한 열을 동적으로 생성할 수 있어 편리합니다. 반면에 CASE 문은 명시적으로 값을 정의하여 변환하는 데 활용됩니다. 이렇게 데이터 변환 방식을 선택할 때에는 데이터의 특성, 사용목적 등을 고려해 가장 적합한 방법을 선택하는 것이 중요합니다.

댓글