์ด๋ ๊ฒ ๋๋๋ฐ... ?
๋ด๋ ์ด๋ ๊ฒ ๋์ด ์์ผ๋ฉด ์๋๋ค..
์ด๋ ๊ฒ ๋ง๋ค์ด์ผ ์ฐจํธ์ ์ฌ์ฉํ๊ธฐ๊ฐ ํธํ๋ค.
์ด์ผํ๋..
chatGPT ๋ณด๋ค ๋ ํ์คํ ์ฐ๋นํํ ๊ฐ๋ฐ์ ์ง์ธํก๋ฐฉ
ํผ๋ฒ ์ ์์ ์๊ฐํ์ง๋ ๋ชปํ๊ณ ์์๋๋ฐ.. ๊ฐ๋ณด์๊ณ
PIVOT ๋ฌธ๋ฒ
SELECT *
FROM ( ํผ๋ฒํ ์ฟผ๋ฆฌ๋ฌธ ) AS result
PIVOT ( ๊ทธ๋ฃนํฉ์(์ง๊ณ์ปฌ๋ผ) FOR ํผ๋ฒ๋์์ปฌ๋ผ IN ([ํผ๋ฒ์ปฌ๋ผ๊ฐ] ... ) AS pivot_result
์ฐธ๊ณ 1. ์๋ธ์ฟผ๋ฆฌ์๋ order by ๊ฐ์ ๊ฑฐ ์ง์ด ๋ฃ์ผ๋ฉด ์๋จ. ์ค๋ฅ ํฐ์ง๋ค.
์ฐธ๊ณ 2. ๊ทธ๋ฃนํจ์๋ SUM(), COUNT(), AVG() ๋ฑ์ ์ฌ์ฉํ ์ ์๋ค.
์ฐธ๊ณ 3. ํผ๋ฒ์ปฌ๋ผ๊ฐ์ ํ๋ฒ ์ง์ ํ๋ฉด ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์์๋ ๊ณ ์ ์ ์ผ๋ก ์ถ๋ ฅ๋๋ค.
์ฐธ๊ณ 4. ํผ๋ฒ์ปฌ๋ผ๊ฐ์ ๋๊ดํธ([ ])๋ ์กด์ฌํด์ผ ํ๋ค.
์ฐธ๊ณ 5. FROM์ ๊ณผ PIVOT์ ์ ๋ณ์นญ(result, pivot_result)์ ๊ผญ ๋ถ์ฌ์ค์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
๋ฉ๋๋ก ๋ฐ๊ฟ์ฐ์ง ๋ง์.
์๋๋ฉด ๋ด๊ฐ ๊ทธ๋ ๊ฒ ํด์ ์๊ฐ ํ๋น๋ฅผ ํ๊ธฐ ๋๋ฌธ์ด๋ค
๐ซฅ๐ถ
์ฌ์ฉ ์์
select *
from
(
select s.STATUS_NM as 'NAME'
, case
when datediff(week, a.CREATE_DATE, getdate()) <= 1 THEN '1'
when datediff(week, a.CREATE_DATE, getdate()) <= 2 THEN '2'
when datediff(week, a.CREATE_DATE, getdate()) <= 3 THEN '3'
else '4'
end as 'WEEKRANGE', COUNT(a.STATUS_ID) AS 'NUM'
from [SFKR_ISS].dbo.ARTICLE a WITH(NOLOCK)
join [SFKR_ISS].dbo.STATUS s ON a.STATUS_ID = s.STATUS_ID
where a.ORG_ID = '1'
AND a.CREATE_DATE BETWEEN '1989-01-01' AND '2023-04-04'
--AND a.USE_YN = 'Y'
group by a.STATUS_ID, s.STATUS_NM, case
when datediff(week, a.CREATE_DATE, getdate()) <= 1 THEN '1'
when datediff(week, a.CREATE_DATE, getdate()) <= 2 THEN '2'
when datediff(week, a.CREATE_DATE, getdate()) <= 3 THEN '3'
else '4'
end
) as result
PIVOT (
sum(NUM) FOR WEEKRANGE IN ([4],[3],[2],[1])
) as pivot_result
๋์์ด ๋ ๋๊ฐ๋ ๋ชจ๋ฅด์ง๋ง ๋์ถฉ ์ด๋ ๊ฒ ์ฌ์ฉํ๊ณ ,
๊ฒฐ๊ณผ
๊น๋ํด์ก๋ค.
๋ง์ฝ์ ์ ์ด๋ฆ์ด ๋ณ๋์ ์ผ๋ก ๋ฐ๊ฟ์ ธ์ผํ๋ฉด ๋์ ์ฟผ๋ฆฌ๋ก ์ง์ผํ์ง๋ง ๋๋ 4,3,2,1 ๋ก ํฝ์ค๋ ๊ฐ๋ค์ด์ด์.. ๊ทธ๋ฅ ํผ๋ฒ์ผ๋ก ๋ณ๊ฒฝํ๋ค.
๋ค์์ ๊ธฐํ๊ฐ ๋๋ค๋ฉด ๋์ ์ฟผ๋ฆฌ๋ ํฌ์คํ
ํด๋ณด๋๋ก ํ๊ฒ ๋ค.