피봇에 관련된 문의 1 5 2,059

by 배문성 [SQL Query] [2012.05.10 22:10:45]



 master  |    year   |  first   | second
-------------------------------------------------------------------
100 2007    100   50
100 2008   20    30
100    2009  30     50
200   2007  50     30
(줄을 맞추려고 해도 맞질 않네요. 년도 다음에 first 값과 second 값입니다.)

이렇게 테이블에 값이 들어가 있습니다.

이것을 가로 형태로 만들고 싶습니다.

master |   2007_first |   2007_second | 2008_first | 2008_second | 2009_first | 2009_second
---------------------------------------------------------------------------------------------------------------------------------------
100 100   50     20    30   30     50
200 50     30
(위 데이타의 값을 가로로 만드는 작업입니다. 줄이 잘 맞질 않네요.)
이렇게 만들고 싶은데요, 피봇을 이용하는 것 같은데, 도무지 감이 오질 않습니다.
고수님 도와 주세요.
by 마농 [2012.05.11 08:36:13]
WITH t(master, year, first, second) AS
(
SELECT 100, 2007, 100, 50 FROM dual
UNION ALL SELECT 100, 2008, 20, 30 FROM dual
UNION ALL SELECT 100, 2009, 30, 50 FROM dual
UNION ALL SELECT 200, 2007, 50, 30 FROM dual
)
SELECT *
  FROM t
 PIVOT (SUM(first) "first", SUM(second) "second" FOR year IN (2007, 2008, 2009))
;

by 배문성 [2012.05.11 10:04:13]

정말 감사합니다.


by 배문성 [2012.05.11 13:19:29]

PIVOT 함수는 Oracle 11g 에 새로 추가된 기능이라고 알고 있습니다.
저는 현재 10g 에서 개발중인데 이경우에는 어떻게 하면 좋을까요?
관심을 가져 주셔서 정말 감사드립니다.

by 마농 [2012.05.11 13:38:51]
SELECT master
     , SUM(DECODE(year, 2007, first )) "2007_first"
     , SUM(DECODE(year, 2007, second)) "2007_second"
     , SUM(DECODE(year, 2008, first )) "2008_first"
     , SUM(DECODE(year, 2008, second)) "2008_second"
     , SUM(DECODE(year, 2009, first )) "2009_first"
     , SUM(DECODE(year, 2009, second)) "2009_second"
  FROM t
 GROUP BY master
 ORDER BY master
;

by 배문성 [2012.05.11 14:00:34]

도움에 정말 감사드립니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입