SELECT SETTLE_YEAR + '-' + SETTLE_MONTH AS YYYYMM,
B.DEPT_NM,
SUM(TOTAL_AMT) AS A,
SUM(MATERIAL_AMT) AS B,
CASE
WHEN SUM(TOTAL_AMT) IS NULL
OR SUM(TOTAL_AMT) = 0 THEN 0
ELSE ROUND((CONVERT(float, SUM(MATERIAL_AMT)) / CONVERT(float, SUM(TOTAL_AMT))) * 100, 2)
END AS C,
SUM(PAY_AMT) AS D,
CASE
WHEN SUM(TOTAL_AMT) IS NULL
OR SUM(TOTAL_AMT) = 0 THEN 0
ELSE ROUND((CONVERT(float, SUM(PAY_AMT)) / CONVERT(float, SUM(TOTAL_AMT))) * 100, 2)
END AS E,
SUM(WELFARE_AMT) AS F,
CASE
WHEN SUM(TOTAL_AMT) IS NULL
OR SUM(TOTAL_AMT) = 0 THEN 0
ELSE ROUND((CONVERT(float, SUM(WELFARE_AMT)) / CONVERT(float, SUM(TOTAL_AMT))) * 100, 2)
END AS G,
SUM(EXPENSES_AMT) AS H,
CASE
WHEN SUM(TOTAL_AMT) IS NULL
OR SUM(TOTAL_AMT) = 0 THEN 0
ELSE ROUND((CONVERT(float, SUM(EXPENSES_AMT)) / CONVERT(float, SUM(TOTAL_AMT))) * 100, 2)
END AS I,
SUM(MARGIN_AMT) AS J,
CASE
WHEN SUM(TOTAL_AMT) IS NULL
OR SUM(TOTAL_AMT) = 0 THEN 0
ELSE ROUND((CONVERT(float, SUM(MARGIN_AMT)) / CONVERT(float, SUM(TOTAL_AMT))) * 100, 2)
END AS K
FROM tb_cjfmshg51 A JOIN TB_CJFMSZA02 B ON A.BIZ_CD = B.DEPT_CD
WHERE SETTLE_YEAR + SETTLE_MONTH >= '201411'
AND SETTLE_YEAR + SETTLE_MONTH <= '201501'
AND A.FIX_YN = 'Y'
AND BIZ_CD = '2'
GROUP BY SETTLE_YEAR + '-' + SETTLE_MONTH,
B.DEPT_NM
이쿼리를 실행하면
YYYYMM DEPT_NM A계정 B계정 C계정 D.....계정
2014-11 부서1 1000 1000 1000 1000
2014-12 부서1 2000 2000 2000 1000
이런식으로 쿼리가 나옵니다.
변경하고자 하는것이
DEPT_NM 계정 2014-11 2014-12
부서1 A 1000 2000
부서1 B 1000 2000
이런식으로 뿌리고싶은데 방법좀 알려주세요ㅠㅠ
Comment 5
-
악마곰
2015.01.14 20:00
-
건우아빠
2015.01.14 21:20
헐 UNPIVOT 후 PIVOT기간의 변동이 다양하다면 동적쿼리으로 하셔야 합니다...굵은 글씨부분을 동적으로 만드시면 될듯withresas (select '2014-11' YYYYMM ,'부서1' DEPT_NM ,1000 A계정 ,1000 B계정 ,1000 C계정,1000 D계정 union allselect '2014-12', '부서1',2000 , 2000 ,2000 ,1000) ,res1 as ( -- 1 차적으로 UNPIVOT 자료를 분리하고select *from ResUNPIVOT([금액] for [계정] in ( A계정 , B계정 , C계정, D계정)) as unpvt)select DEPT_NM , [계정] ,[2014-11],[2014-12] -- 2 차로 PIVOTfrom res1PIVOT(sum(금액)for YYYYMM in ([2014-11],[2014-12])) as b -
뽀챙
2015.01.15 08:10
소중한 답변 감사드립니다..select '2014-11' YYYYMM ,'부서1' DEPT_NM ,1000 A계정 ,1000 B계정 ,1000 C계정,1000 D계정 union allselect '2014-12', '부서1',2000 , 2000 ,2000 ,1000이부분에서 앞에 2014-11 이부분화면에서 검색조건이 5월부터~11월까지면그만큼 select가 늘어나야되는거에요? 잘모르겠네요ㅠㅠ pivot 이 생소해서 여러가지로 공부중이긴한데 아직은 많이 부족한가봅니다ㅜㅜ -
건우아빠
2015.01.15 12:23
네
pivot 이나 unpivot쪽은 증가 되어야 하지만
select 에는 * 로 표시 하셔도 됩니다.
동적 쿼리로 작성하시면 되구요..
-
건우아빠
2015.01.15 12:49
[금액] for [계정] in ( A계정 , B계정 , C계정, D계정,.........)for YYYYMM in ([2014-11],[2014-12],.........)select DEPT_NM , [계정] ,[2014-11],[2014-12 ],.........
http://www.sqler.com/658597#comment_658643
검색하셔서 어떻게 적용할것인지...