현재는 아래와 같이 화면이 구성되어 있습니다.
SELECT 사업부문, ~ ,
SUM(CASE WHEN RIGHT(A.OrderDate,2) = '01' THEN ISNULL(A.OrderQty,0) ELSE 0 END) AS OrderQty01,-- 1일 수주수량
SUM(CASE WHEN RIGHT(A.OrderDate,2) = '01' THEN ISNULL(A.OrderStopQty,0) ELSE 0 END) AS OrderStopQty01,-- 1일 수주중단수량
그런데 이렇게 할 경우 1일 부터 31일까지 하면 좌우스크롤을 너무 많이 해야 되어서 아래와 같이
구분 항목을 세로로 넣고, 가로로는 1일에서 31일까지 보여주는 방식으로 변경하려고 합니다.
1. select 할 때 구분자를 넣어서 새롭게 temp table을 만들어서 그것을 select 해야 될까요?
2. 아니면 table에서 자료를 가져올 때부터 세로로 배열할 수 있을까요?
제가 정확히 설명드렸나 모르겠네요.
잘 이해가 안 되시는 부분 알려 주시면 댓글로 추가 설명해드리겠습니다.
unpivot을 이용하시면 원하시는것이 가능 합니다.
with test
as (
select 1 id, '01' mm, 1 [수주수량] , 1 [수주중단수량], 1 [출하의뢰수량] , 12[출하의뢰중단수량] ,11 [거래명세서수량] ,31 [거래명세서출고수량],51 [출하의뢰미진행수량] union all
select 1 id, '02' mm, 2 a , 7 b ,11 c , 3 d ,21 e , 1 f, 2 g union all
select 1 id, '03' mm, 3 a , 6 b , 2 c , 5 d , 1 e , 6 f, 1 g union all
select 1 id, '04' mm, 4 a , 5 b , 5 c , 1 d ,55 e , 7 f, 1 g union all
select 1 id, '05' mm, 5 a , 4 b , 6 c , 1 d , 4 e , 8 f, 2 g union all
select 1 id, '06' mm, 6 a , 3 b , 3 c , 9 d , 7 e ,13 f, 4 g union all
select 1 id, '07' mm, 7 a , 2 b , 1 c , 1 d ,81 e , 1 f, 5 g union all
select 1 id, '08' mm, 8 a , 1 b , 7 c , 8 d , 1 e , 2 f, 3 g union all
select 2 id, '07' mm, 7 a , 2 b , 1 c , 1 d ,81 e , 1 f, 5 g
)
select id,Gubun
, sum(case when mm ='01' then qty end ) m01
, sum(case when mm ='02' then qty end ) m01
, sum(case when mm ='03' then qty end ) m01
, sum(case when mm ='04' then qty end ) m01
, sum(case when mm ='05' then qty end ) m01
, sum(case when mm ='06' then qty end ) m01
, sum(case when mm ='07' then qty end ) m01
, sum(case when mm ='08' then qty end ) m01
, sum(case when mm ='09' then qty end ) m01
, sum(case when mm ='10' then qty end ) m01
, sum(case when mm ='11' then qty end ) m01
, sum(case when mm ='12' then qty end ) m01
from test
unpivot
(qty For Gubun in
([수주수량]
,[수주중단수량]
,[출하의뢰수량]
,[출하의뢰중단수량]
,[거래명세서수량]
,[거래명세서출고수량]
,[출하의뢰미진행수량]) ) as unpvt
group by id,Gubun
order by id,gubun