10-2-1. PIVOT


피벗(PIVOT)의 사전적 의미는 물체가 회전하는데 사용하는 회전축(중심축)을 뜻한다. 데이터를 다루는 데 있어 피벗 역시, 회전축(중심축)을 기준으로 데이터를 회전시키는 기법을 이야기한다. SQL에서 피벗은 다음과 같이 요약할 수 있다.

Untitled

10-2-2. CASE 한 번 더 살펴보기


앞에서 이미 CASE를 설명했다. PIVOT 기능을 구현하기 위해서는 CASE를 사용해야 하므로 간단히 복습해보도록 하자.

아래는 CASE를 사용해 주문일자에 따라 각각 컬럼을 추가해서 보여주는 SQL이다. 주문일자가 2022년 1월 1일이면 AMT_01 컬럼에, 2022년 1월 2일이면 AMT_02에 값을 보여주고 있다.

-- [SQL-10-2-2-a] 주문일자에 따라 컬럼을 분리해서 표현
SELECT  T1.ShopID ,T1.OrdNo ,T1.OrdDtm ,T1.OrdAmt
        ,CASE WHEN DATE_FORMAT(T1.OrdDtm,'%Y%m%d') = '20220101' THEN T1.OrdAmt END AMT_01
        ,CASE WHEN DATE_FORMAT(T1.OrdDtm,'%Y%m%d') = '20220102' THEN T1.OrdAmt END AMT_02
FROM    startdb.Ord T1
WHERE   T1.OrdDtm >= STR_TO_DATE('20220101','%Y%m%d')
AND     T1.OrdDtm <  STR_TO_DATE('20220103','%Y%m%d')
AND     T1.ShopId = 'S003'
ORDER BY T1.ShopID, T1.OrdDtm;

ShopID  OrdNo  OrdDtm               OrdAmt    AMT_01    AMT_02    
------  -----  -------------------  --------  --------  --------  
S003    25278  2022-01-01 08:00:00  4000.000  4000.000  NULL      
S003    25281  2022-01-02 08:00:00  4500.000  NULL      4500.000  
S003    25295  2022-01-02 10:00:00  8000.000  NULL      8000.000  
S003    25311  2022-01-02 10:00:00  3500.000  NULL      3500.000  
S003    25334  2022-01-02 11:00:00  8500.000  NULL      8500.000  

10-2-3. ShopId로 PIVOT하기