이렇게 되는데... ?
내는 이렇게 되어 있으면 안된다..
이렇게 만들어야 차트에 사용하기가 편하다.
어케하냐..
chatGPT 보다 더 확실한 우당탕탕 개발자 지인톡방
피벗 을 아예 생각하지도 못하고 있었는데.. 가보자고
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 로 픽스된 값들이어서.. 그냥 피벗
으로 변경했다.
다음에 기회가 된다면 동적쿼리도 포스팅해보도록 하겠다.