데이터베이스 개발자 질문과 답변 게시판
여기서 도움 받아서 문제 해결은 했는데 새로운 도전 과제가 생겼습니다 ^^;
select GoodItemSeq,
(CASE When Gubun = 'ProdQty' Then '생산수량'
When Gubun = 'OKQty' Then '양품수량'
When Gubun = 'BadQty' Then '불량수량' END) Gubun,
(CASE When Gubun = 'ProdQty' Then 1
When Gubun = 'OKQty' Then 2
When Gubun = 'BadQty' Then 3 END) GubunOrder,
sum(Qty) QtySUM,
sum(case when substring(WorkDate,5,2) = '01' then Qty else 0 end) Qty01,
sum(case when substring(WorkDate,5,2) = '02' then Qty else 0 end) Qty02,
sum(case when substring(WorkDate,5,2) = '03' then Qty else 0 end) Qty03,
sum(case when substring(WorkDate,5,2) = '04' then Qty else 0 end) Qty04,
sum(case when substring(WorkDate,5,2) = '05' then Qty else 0 end) Qty05,
sum(case when substring(WorkDate,5,2) = '06' then Qty else 0 end) Qty06,
sum(case when substring(WorkDate,5,2) = '07' then Qty else 0 end) Qty07,
sum(case when substring(WorkDate,5,2) = '08' then Qty else 0 end) Qty08,
sum(case when substring(WorkDate,5,2) = '09' then Qty else 0 end) Qty09,
sum(case when substring(WorkDate,5,2) = '10' then Qty else 0 end) Qty10,
sum(case when substring(WorkDate,5,2) = '11' then Qty else 0 end) Qty11,
sum(case when substring(WorkDate,5,2) = '12' then Qty else 0 end) Qty12
from A
unpivot ( Qty For Gubun in (prodqty, okqty, badqty) ) as unpvt
where CompanySeq = 1
and WorkDate like '2013%'
group by GoodItemSeq,
Gubun
order by GoodItemSeq,
GubunOrder
이렇게 하니 각 품목별로 생산수량, 양품수량, 불량수량이 나오는데
아래 파란색 글자처럼 월별로 SUM된 값을 구하려면 어떻게 해야 될까요?
1월 2월 3월
생산수량 3 5 7
양품수량 1 2 4
불량수량 2 3 3
A 생산수량 1 2 3
A 양품수량 1 1 2
A 불량수량 0 1 1
B 생산수량 2 3 4
B 양품수량 0 1 2
B 불량수량 2 2 2
Comment 8
-
건우아빠
2013.07.01 13:53
-
은빛유니콘
2013.07.01 15:53
네. 알겠습니다.
그렇게라도 힌트 주셔서 감사합니다.
-
건우아빠
2013.07.01 17:29
group by Gubun ,GoodItemSeq
WITH ROLLUP
HAVING GROUPING ( Gubun ) = 0order by GoodItemSeq ,gubun
-
은빛유니콘
2013.07.01 18:44
select GoodItemSeq,
(CASE When Gubun = 'ProdQty' Then '생산수량'
When Gubun = 'OKQty' Then '양품수량'
When Gubun = 'BadQty' Then '불량수량' END) Gubun,
sum(case when substring(A.WorkDate,5,2) = '01' then unpvt.Qty else 0 end) Qty01,
sum(case when substring(A.WorkDate,5,2) = '02' then unpvt.Qty else 0 end) Qty02,
sum(case when substring(A.WorkDate,5,2) = '03' then unpvt.Qty else 0 end) Qty03,
sum(case when substring(A.WorkDate,5,2) = '04' then unpvt.Qty else 0 end) Qty04,
sum(case when substring(A.WorkDate,5,2) = '05' then unpvt.Qty else 0 end) Qty05,
sum(case when substring(A.WorkDate,5,2) = '06' then unpvt.Qty else 0 end) Qty06,
sum(case when substring(A.WorkDate,5,2) = '07' then unpvt.Qty else 0 end) Qty07,
sum(case when substring(A.WorkDate,5,2) = '08' then unpvt.Qty else 0 end) Qty08,
sum(case when substring(A.WorkDate,5,2) = '09' then unpvt.Qty else 0 end) Qty09,
sum(case when substring(A.WorkDate,5,2) = '10' then unpvt.Qty else 0 end) Qty10,
sum(case when substring(A.WorkDate,5,2) = '11' then unpvt.Qty else 0 end) Qty11,
sum(case when substring(A.WorkDate,5,2) = '12' then unpvt.Qty else 0 end) Qty12
from A
unpivot ( Qty For Gubun in (prodqty, okqty, badqty) ) as unpvt
where CompanySeq = 1
and WorkDate like '2013%'
group by GROUPING Sets((GoodItemSeq, Gubun), (Gubun))
order by GoodItemSeq,
grouping(Gubun) asc, case gubun when 'ProdQty' then 1
when 'OKQty' then 2
when 'BadQty' then 3 end asc위와 같이 수정을 해서 원하는 결과를 얻어 내긴 했습니다.
그런데 또 다른 문제가 생겼습니다
현재 상태에서는 테이블 A를 다른 테이블과 join 하지 못하나요?
다른 테이블 1개와 left outer join 했더니
'unpvt'에 대해 열 'CompanySeq'이(가) 여러 번 지정되었습니다.
라고 에러가 나오네요. ㅡㅡ;
-
건우아빠
2013.07.01 21:41
WITH ROLLUP 후 조인을 하실수는 있지만
이와이면 먼저 조인을 하시고 하시는게 좀더 쉽지 않을까 생각됩니다.
-
은빛유니콘
2013.07.02 11:38
음...A라고 되어 있는 부분에 미리 조인을 다 해두고
unpivot하라는 말씀이시죠?
시도해보겠습니다.
-
은빛유니콘
2013.07.08 13:50
먼저 조인하니까 속도도 너무 느리고, 조인이 많으니 아예 용량 문제로 실행이 안 되어서
1번에 해결할 수 없어서 SP로 처리했습니다.
사전에 조인된 채로 모든 자료를 가져와서 임시 테이블에 담고,
그 다음에 임시테이블로 언피봇 실행해서 해결했습니다.
이렇게 발전할 수 있도록 도움/힌트 주신 건우아빠님께 감사합니다.
-
은빛유니콘
2013.07.08 13:30
먼저 조인하니까 속도도 너무 느리고, 조인이 많으니 아예 용량 문제로 실행이 안 되어서
1번에 해결할 수 없어서 SP로 처리했습니다.
사전에 조인된 채로 모든 자료를 가져와서 임시 테이블에 담고,
그 다음에 임시테이블로 언피봇 실행해서 해결했습니다.
WITH ROLLUP 과 GROUPING 을 찾아보세요....
원하시는 결과를 충분히 만드실수 있을겁니다.