열 을 돌 리 는 SQL SERVER PIVOT 와 용법 에 대한 상세 한 설명

4759 단어 sqlserverpivot행 열
데이터 베 이 스 를 조작 하 는 과정 에서 우 리 는'행 열'을 실현 해 야 하 는 수 요 를 만 났 다.예 를 들 어 다음 표 는 특정한 가게 의 일주일 수입 상황 표 이다.

WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIMAL)
우 리 는 먼저 아 날로 그 데 이 터 를 삽입 합 니 다.

INSERT INTO WEEK_INCOME 
SELECT '   ',1000
UNION ALL
SELECT '   ',2000
UNION ALL
SELECT '   ',3000
UNION ALL
SELECT '   ',4000
UNION ALL
SELECT '   ',5000
UNION ALL
SELECT '   ',6000
UNION ALL
SELECT '   ',7000
일반적으로 우리 가 가장 자주 사용 하 는 조 회 는 일주일 중 매일 또는 며칠 의 수입 을 조회 하 는 것 이다.예 를 들 어 월요일 부터 일요일 까지 의 모든 수입 을 조회 하 는 것 이다.

SELECT WEEK,INCOME FROM WEEK_INCOME
다음 검색 결과 집합 을 가 져 옵 니 다:
WEEK           INCOME
월요일           1000
화요일           2000
수요일           3000
목요일           4000
금요일           5000
토요일           6000
일요일           7000
그러나 일부 상황 에서(흔히 일부 보고서 에서)우 리 는 한 줄 에 월요일 부터 일요일 까지 의 수입 을 표시 하고 싶 습 니 다.이때 조회 결과 집 은 이렇게 해 야 합 니 다.
월요일   화요일   수요일   목요일   금요일   토요일   일요일
1000     2000     3000     4000     5000     6000     7000
이 경우 SQL 쿼 리 문 구 는 다음 과 같이 쓸 수 있 습 니 다.

SELECT 
SUM(CASE WEEK WHEN '   ' THEN INCOME END) AS [   ],
SUM(CASE WEEK WHEN '   ' THEN INCOME END) AS [   ],
SUM(CASE WEEK WHEN '   ' THEN INCOME END) AS [   ],
SUM(CASE WEEK WHEN '   ' THEN INCOME END) AS [   ],
SUM(CASE WEEK WHEN '   ' THEN INCOME END) AS [   ],
SUM(CASE WEEK WHEN '   ' THEN INCOME END) AS [   ],
SUM(CASE WEEK WHEN '   ' THEN INCOME END) AS [   ]
FROM WEEK_INCOME
하지만 SQL SERVER 2005 에서 더 간편 한 방법 을 제공 한 것 이 바로'PIVOT'관계 연산 자 였 다.(반대로'열 전 행'은 UNPIVOT)이 고,다음은 PIVOT 를 사용 하여'행 전 열'을 실현 하 는 SQL 문 구 를 말한다.

SELECT [   ],[   ],[   ],[   ],[   ],[   ],[   ]
FROM WEEK_INCOME
PIVOT
(
  SUM(INCOME) for [week] in([   ],[   ],[   ],[   ],[   ],[   ],[   ])
)TBL
MSDN 에서 PIVOT 에 대한 용법 을 참고 하 십시오.
http://technet.microsoft.com/zh-cn/library/ms177410(v=sql.105).aspx
그러나 MSDN 의 묘 사 는 너무 규범 적 이 고 엄숙 해서 나 는 한참 을 보 았 지만 PIVOT 를 어떻게 사용 하 는 지 알 지 못 해서 PIVOT 안의 문법 적 의 미 를 잘 모르겠다.그래서 구 글 은 많은 자료 와 위 에서 언급 한 WEEKINCOME 표 의 예 를 시험 하여 최종 적 으로 그 용법 을 밝 혔 다.인터넷 상에 서 박문 한 편 이 잘 해석 되 었 다.http://rely1020.blog.ithome.com.tw/post/1606/39111기본적으로 내 가 쓰 고 싶 은 것 은 이 박문 을 참조 하고 자신의 개인 적 인 이 해 를 더 하 는 것 이다.
PIVOT 문법 을 이해 하려 면 마이크로소프트 가 왜 이렇게 PIVOT 를 디자인 하 는 지 알 아야 한다.그러나 나 는 현실 적 인 수요 가 디자인 방향 을 탄생 시 키 는 것 이 라 고 믿는다.그래서 결국은 우 리 는'행 열'이 무엇 인지 알 아야 한다.
정상 적 인 상황 에서 의 조회 결 과 는 다음 과 같다.
월요일           1000
화요일           2000
수요일           3000
목요일           4000
금요일           5000
토요일           6000
일요일           7000
열 을 돌 린 후 다음 과 같 습 니 다:
월요일   화요일   수요일   목요일   금요일   토요일   일요일
1000    2000    3000    4000    5000    6000    7000
즉,행 이 열 을 바 꾼 후에 원래 의 한 열의 값 이 열 로 바 뀌 었 습 니 다.여기 서 원래 WEEK 열의 값 인'월요일','화요일'...'일요일'은 열 을 만 들 었 고 우리 가 해 야 할 또 다른 일 은 바로 이 열의 값 을 계산 하 는 것 입 니 다.(여기 서'계산'은 사실은 PIVOT 안의 집합 함수(sum,avg 등)입 니 다.
지금 주석 을 결합 하여 PIVOT 문법 을 분석 해 보 세 요.http://rely1020.blog.ithome.com.tw/post/1606/39111,안에서 말 한 PIVOT 문법의 세 가지 절차 가 매우 중요 하 다):

SELECT [   ],[   ],[   ],[   ],[   ],[   ],[   ]--   PIVOT   (            )     “*”       ,         (      )
FROM WEEK_INCOME --   PIVOT    (         ,  PIVOT                  ,            )       select   ,            ,      
PIVOT
(
  SUM(INCOME) for [week] in([   ],[   ],[   ],[   ],[   ],[   ],[   ])--   PIVOT    ,       ,       。    SUM                ,   (sum),    (avg)  min,max  。    week_income          week  “   ”,     income 1000,   income 500,       sum,    “   ”        1500 。   for [week] in([   ],[   ]...)  for [week]    week            ,   “    ”。                ,              ,      ?   in   ,              , in     “   ” “   ”(  ,in     week   ,"    ")。    ,SUM(INCOME) for [week] in([   ],[   ],[   ],[   ],[   ],[   ],[   ])           ,   :  [week]  "   ","   ","   ","   ","   ","   ","   "      ,      income   。
)TBL--      
이상 은 제 가 PIVOT 에 대한 이해 입 니 다.최선 을 다 해 표현 하 겠 습 니 다.그 나 저 나 개인 적 으로 이해 하 는 방식 도 다 릅 니 다.제 가 박문 을 많이 읽 기 시 작 했 을 때 PIVOT 의 용법 을 알 지 못 했 습 니 다.결 과 는 억지로 예 와 다른 사람의 박문 을 통 해 생각 을 더 해서 알 게 되 었 습 니 다.그래서 여러분 이 이 편 을 본 후에 도 이해 하지 못 한다 면 정상 적 입 니 다.예 에 맞 춰 자신 이 생각 하 는 것 을 더 하면 천천히 이해 할 수 있 습 니 다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기