WITH board AS ( SELECT '2020-12-01' createdate, 'StarCraft' type, '스타는 재미있다' content FROM dual UNION ALL SELECT '2020-12-01', 'StarCraft', '스타2도 재미있다' FROM dual UNION ALL SELECT '2020-12-03', 'LOL' , '롤은 재미있다' FROM dual UNION ALL SELECT '2020-12-05', 'StarCraft', '스타는 재미없다' FROM dual UNION ALL SELECT '2020-12-07', 'LOL' , '롤은 재미없다' FROM dual ) SELECT * FROM (SELECT createdate, type, content , ROW_NUMBER() OVER(PARTITION BY type, createdate ORDER BY 1) rn FROM board WHERE createdate BETWEEN '2020-12-01' AND '2020-12-07' ) PIVOT (MIN(content) FOR createdate IN ( '2020-12-01' "2020-12-01" , '2020-12-02' "2020-12-02" , '2020-12-03' "2020-12-03" , '2020-12-04' "2020-12-04" , '2020-12-05' "2020-12-05" , '2020-12-06' "2020-12-06" , '2020-12-07' "2020-12-07" ) ) ORDER BY type, rn ;
가변 열을 쿼리로 구현할 수는 없습니다.
고정 개수의 고정값에 대해서만 가능합니다.
가변 열로 하려면 동적쿼리로 구현하셔야 합니다.
다만 기간이 한달 또는 일주일 형태로 고정된다면?
한달의 경우 일자로 01~31 고정 형태로 구현 가능하고
일주일의 경우 요일로 일월화수목금토 고정 형태로 구현 가능합니다.
WITH board AS ( SELECT '2020-12-01' createdate, 'StarCraft' type, '스타는 재미있다' content FROM dual UNION ALL SELECT '2020-12-01', 'StarCraft', '스타2도 재미있다' FROM dual UNION ALL SELECT '2020-12-03', 'LOL' , '롤은 재미있다' FROM dual UNION ALL SELECT '2020-12-05', 'StarCraft', '스타는 재미없다' FROM dual UNION ALL SELECT '2020-12-07', 'LOL' , '롤은 재미없다' FROM dual ) SELECT * FROM (SELECT SUBSTR(createdate, 9, 2) dd , type, content , ROW_NUMBER() OVER(PARTITION BY type, createdate ORDER BY 1) rn FROM board WHERE createdate LIKE '2020-12%' ) PIVOT (MIN(content) FOR dd IN ( '01' "01", '02' "02", '03' "03", '04' "04", '05' "05" , '06' "06", '07' "07", '08' "08", '09' "09", '10' "10" , '11' "11", '12' "12", '13' "13", '14' "14", '15' "15" , '16' "16", '17' "17", '18' "18", '19' "19", '20' "20" , '21' "21", '22' "22", '23' "23", '24' "24", '25' "25" , '26' "26", '27' "27", '28' "28", '29' "29", '30' "30" , '31' "31") ) ORDER BY type, rn ;