Oracle 에서는 두개 항목에 대한 집계 피벗이 가능한데
PIVOT (MIN(cnt) cnt, MIN(view_cnt) v_cnt FOR month IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12))
MSSQL 에서는 불가능 한 듯 합니다.
다른 대안으로는
1. 하나의 항목으로 묶어서 피벗
2. 두개 항목을 두줄로 표현. Unpivot
3. Pivot 구문 대신 Group By Min(Case ) 구문 사용
기타 사항 : year, month 등의 예약어를 컬럼명으로 사용하는 것은 지양해야 합니다.
-- Oracle SELECT * FROM t PIVOT (MIN(cnt) cnt, MIN(view_cnt) v_cnt FOR month IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)) ;
-- MSSQL -- -- 1. 하나의 항목으로 묶어서 피벗 SELECT * FROM (SELECT year , month , CONCAT(cnt, '/', view_cnt) v FROM t ) a PIVOT (MIN(v) FOR month IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])) a ; -- 2. 두개 항목을 두줄로 표현. Unpivot SELECT * FROM t UNPIVOT (v FOR gb IN (cnt, view_cnt)) a PIVOT (MIN(v) FOR month IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])) a ORDER BY year, gb ; -- 3. Pivot 구문 대신 Group By Min(Case ) 구문 사용 SELECT year , MIN(CASE month WHEN 1 THEN cnt END) cnt_01 , MIN(CASE month WHEN 1 THEN view_cnt END) view_cnt_01 , MIN(CASE month WHEN 2 THEN cnt END) cnt_02 , MIN(CASE month WHEN 2 THEN view_cnt END) view_cnt_02 , MIN(CASE month WHEN 3 THEN cnt END) cnt_03 , MIN(CASE month WHEN 3 THEN view_cnt END) view_cnt_03 , MIN(CASE month WHEN 4 THEN cnt END) cnt_04 , MIN(CASE month WHEN 4 THEN view_cnt END) view_cnt_04 , MIN(CASE month WHEN 5 THEN cnt END) cnt_05 , MIN(CASE month WHEN 5 THEN view_cnt END) view_cnt_05 , MIN(CASE month WHEN 6 THEN cnt END) cnt_06 , MIN(CASE month WHEN 6 THEN view_cnt END) view_cnt_06 , MIN(CASE month WHEN 7 THEN cnt END) cnt_07 , MIN(CASE month WHEN 7 THEN view_cnt END) view_cnt_07 , MIN(CASE month WHEN 8 THEN cnt END) cnt_08 , MIN(CASE month WHEN 8 THEN view_cnt END) view_cnt_08 , MIN(CASE month WHEN 9 THEN cnt END) cnt_09 , MIN(CASE month WHEN 9 THEN view_cnt END) view_cnt_09 , MIN(CASE month WHEN 10 THEN cnt END) cnt_10 , MIN(CASE month WHEN 10 THEN view_cnt END) view_cnt_10 , MIN(CASE month WHEN 11 THEN cnt END) cnt_11 , MIN(CASE month WHEN 11 THEN view_cnt END) view_cnt_11 , MIN(CASE month WHEN 12 THEN cnt END) cnt_12 , MIN(CASE month WHEN 12 THEN view_cnt END) view_cnt_12 FROM t GROUP BY year ;