MSSQL에서 행과 열을 변환하려고 합니다.
다음과 같은 테이블이 있습니다.
<테이블>
년월 지역 금액1 금액2 금액3
201501 서울 1,000 1,500 2,500
201501 경기 3,000 2,000 5,000
201502 서울 3,000 1,500 4,500
201502 경기 2,000 1,000 3,000
201503 서울 1,000 1,500 2,500
201503 경기 1,000 4,500 5,500
위 테이블을 아래와 같이 바꾸고 싶습니다.
<테이블>
201501 201502 201503
지역 금액1 금액2 금액3 금액1 금액2 금액3 금액1 금액2 금액3
서울 1,000 1,500 2,500 3,000 1,500 4,500 1,000 1,500 2,500
경기 3,000 2,000 5,000 2,000 1,000 3,000 1,000 4,500 5,500
PIVOT은 집계함수가 여러 개일 경우에 쓸 수 있다고 하여 불가능하다고 판단하였습니다.
다른 방법이 있을까요? SQL 고수분들 알려주세요ㅠㅠ
읽어주셔서 감사합니다!
Comment 1
-
악마곰
2015.06.17 17:21
PIVOT 안쓰셔도, 기본적으로 CASE 구문으로 해결 가능합니다.
아래 쿼리 참고 하세요
WITH TEMP AS(
SELECT '201501' as 년월, '서울' as 지역, 1000 as 금액1, 1500 as 금액2, 2500 as 금액3 union all
SELECT '201501', '경기', 3000, 2000, 5000 union all
SELECT '201502', '서울', 3000, 1500, 4500 union all
SELECT '201502', '경기', 2000, 1000, 3000 union all
SELECT '201503', '서울', 1000, 1500, 2500 union all
SELECT '201503', '경기', 1000, 4500, 5500
)
SELECT
지역
, SUM(CASE WHEN 년월 = '201501' THEN 금액1 ELSE 0 END) '201501 금액1'
, SUM(CASE WHEN 년월 = '201501' THEN 금액2 ELSE 0 END) '201501 금액2'
, SUM(CASE WHEN 년월 = '201501' THEN 금액3 ELSE 0 END) '201501 금액3'
, SUM(CASE WHEN 년월 = '201502' THEN 금액1 ELSE 0 END) '201502 금액1'
, SUM(CASE WHEN 년월 = '201502' THEN 금액2 ELSE 0 END) '201502 금액2'
, SUM(CASE WHEN 년월 = '201502' THEN 금액3 ELSE 0 END) '201502 금액3'
, SUM(CASE WHEN 년월 = '201503' THEN 금액1 ELSE 0 END) '201503 금액1'
, SUM(CASE WHEN 년월 = '201503' THEN 금액2 ELSE 0 END) '201503 금액2'
, SUM(CASE WHEN 년월 = '201503' THEN 금액3 ELSE 0 END) '201503 금액3'
FROM TEMP
GROUP BY 지역