티스토리 뷰
[MSSQL] 행렬 변환 함수 PIVOT, UNPIVOT
# PIVOT
아래와 같이 학생이름, 과목, 점수가 반영된 테이블이 있다고 가정하면
WITH TABLE_A (이름, 과목, 점수) AS (
SELECT '철수', '국어', 90 UNION ALL
SELECT '철수', '영어', 85 UNION ALL
SELECT '영희', '국어', 70 UNION ALL
SELECT '영희', '영어', 80 )
SELECT * FROM TABLE_A
- 조회 값
이름 | 과목 | 점수 |
철수 | 국어 | 90 |
철수 | 영어 | 85 |
영희 | 국어 | 70 |
영희 | 영어 | 80 |
이 테이블에 대하여 과목별 학생의 점수 합을 구하고 싶다면? 아래와 같이 MSSQL에서 재공하는 PIVOT을 사용 한다.
ex) 과목별 점수 구하기
WITH TABLE_A (이름, 과목, 점수) AS (
SELECT '철수', '국어', 90 UNION ALL
SELECT '철수', '영어', 85 UNION ALL
SELECT '영희', '국어', 70 UNION ALL
SELECT '영희', '영어', 80 )
SELECT * FROM TABLE_A
PIVOT(SUM(점수) FOR 이름 IN (철수,영희)) AS PVT
- 결과 값
과목 | 철수 | 영희 |
국어 | 90 | 70 |
영어 | 85 | 80 |
이렇게 조회가 된다.
위 식을 복사해서 사용해 보면 이해하기가 쉽다.
# UNPIVOT
아래와 같이 학생이름, 과목, 점수가 반영된 테이블이 있다고 가정하면
WITH TABLE_A (이름, 국어, 영어) AS (
SELECT '철수', '90', '80' UNION ALL
SELECT '영희', '85', '100' )
SELECT * FROM TABLE_A
- 조회 값
이름
국어
영어
철수
90
80
영희
85
100
ex) 이름에 과목별로 점수를 구하고 싶을 경우
WITH TABLE_A (이름, 국어, 영어) AS (
SELECT '철수', '90', '80' UNION ALL
SELECT '영희', '85', '100' )
SELECT 이름, 과목, 점수 FROM TABLE_A
UNPIVOT(점수 FOR 과목 IN (영어))AS UNPVT
union all
SELECT 이름, 과목, 점수 FROM TABLE_A
UNPIVOT(점수 FOR 과목 IN (국어))AS UNPVT
-- union all 을 사용한 이유는?
-- 원래는 UNPIVOT(점수 FOR 과목 IN (국어, 영어))AS UNPVT 이렇게 사용하면 영어 국어에 대한 내용이 나오는데 에러가 나서 그냥 union all 을 사용해 버렸다.
-- 에러 수정하면 다시 올리도록 하겠다. 물론 에러가 발생한 이유도 같이 올리도록 하겠다!!
- 결과 값
이름
과목
점수
철수
영어
80
영희
영어
100
철수
국어
90
영희
국어
85
'IT > MS-SQL' 카테고리의 다른 글
MSSQL 한글 자동 전환 문제 해결!! (1) | 2019.03.15 |
---|---|
MSSQL Alter Table / 테이블 컬럼 추가 (0) | 2018.12.14 |
MSSQL DATABASE 백업 DB 만들기 / 테스트 DB 만들기 (0) | 2017.11.09 |
MSSQL 특수문자 LIKE 조회하기 Escape 사용하기 _%#&- 등 조회 (0) | 2017.11.08 |
[MSSQL] 예외처리, exists 사용법 (0) | 2017.05.04 |
- Total
- Today
- Yesterday
- 식샤를합시다
- 후기
- 데이트
- 비트코인
- 캠핑
- 익산맛집
- 햄스터
- 군산
- 왕자크림
- ms-sql
- 맥주
- 맛집
- Pokemon Go
- 생생정보 황금레시피
- 익산
- 레시피
- M포인트
- 먹어본다
- 황금레시피
- 전북
- c#
- mssql
- 아이폰
- 전주
- 리니지M
- 차박
- 카페
- 아인스타이늄
- 도미넌트
- 부송동
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |