달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

MSSQL 을 사용하다가 보면 아래와 같은 데이터를 만날 수 있다.

RegDate        Code    Count
2011-01-27      AU      55
2011-01-27      BE      1
2011-01-27      BR      2
2011-01-27      CA      22
2011-01-27      CH      2
2011-01-27      CN      150
2011-01-27      DE      20
2011-01-27      ES      30
2011-01-27      FR      4
2011-01-27      GB      59
2011-01-27      Han     1
2011-01-27      HK      81
2011-01-27      HU      1
2011-01-27      IE       2


대충 위와 같이 특정 일에 어느 코드로(국가코드) 몇건의 접속이 있었나 로그를 남긴것이다..
하지만 나는 이걸 가로로 나열하고 싶었다...
그래서 찾아낸것이 PIVOT..

RegDate        KR   US   JP   CN
2011-01-27    262   290   97   150

좀 데이터가 많아서 4개 국가코드만 빼내어 봤다..

이걸 가능하게 하는 코드 PIVOT을 보자

우선 첫번째 소스의 경우
SELECT RegDate, Code, Count(*) as Cnt From [TABLE]
GROUP BY RegDate, Code
인 상태라.. 날짜 + 코드로 GROUP BY 를 사용하고 각각의 Cnt 를 뽑았다.

이걸 PIVOT을 회전시키려면
SELECT RegDate, KR, US, JP, CN   FROM   -- (내가 뽑아낼 데이터 필드의 value값을 적어주면 된다)
     ( SELECT RegDate, Code, Count(*) as Cnt From [TABLE] GROUP BY RegDate, Code ) A
PIVOT
( Sum(Cnt) FOR Code in (KR, US, JP, CN) ) PV  -- Code필드의 Value가  KR, US, JP, CN 인 것들의 각각의  합계값을 출력 하라는 거죠.

이와 같이 하면 옆으로 돌아간 데이터가 나옵니다.
 물론 각 필드를 더 추가하면 더 많은 필드를 빼올 수도 있습니다.


Posted by SadDev
|