반응형
[Oracle] 행열 변환, 오라클 PIVOT 테이블 사용 방법
PIVOT 테이블은 행/열을 바꾸거나 통계처리할 때 대체로 사용된다.
사용 구문
SELECT ...
FROM ...
PIVOT [XML] ( --------------(1)
PIVOT_CLAUSE --------------(2)
PIVOT_FOR_CLAUSE --------------(3)
PIVOT_IN_CLAUSE --------------(4)
)
WHERE ...
① PIVOT : PIVOT 테이블, [XML]을 정의할 경우 필터링된 PIVOT 값이 XML 타입으로 반환된다.
② PIVOT_CLAUSE : 집계함수 (SUM, MAX, MIN, COUNT 등)와 같은 컬럼을 정의한다.
③ PIVOT_FOR_CLAUSE : PIVOT의 기준이 되는 컬럼을 정의한다.
④ PIVOT_IN_CLAUSE : PIVOT_FOR_CLUASE 에서 정의한 컬럼의 필터링 값을 정의한다.
사용 예제
테이블명이 TEST_TABLE이 다음과 같은 데이터를 갖고 있다.
해당 테이블의 데이터를 가지고 학년별 남녀 명 수의 통계를 다음과 같이 뽑으려고 한다.
1학년 | 2학년 | 3학년 | |
여자 | - 명 | - 명 | - 명 |
남자 | - 명 | - 명 | - 명 |
- PIVOT 쿼리
SELECT * FROM TEST_TABLE
PIVOT (
COUNT(NAME) AS CNT
FOR GRADE IN (
'1학년', '2학년', '3학년'
)
)
- 결과
만약 집계 데이터의 ALIAS를 주지 않으면 위와 같이 '필터링 값' + '기준컬럼명' 이 표출된다.
PIVOT을 응용해서 더 다양한 구조의 데이터를 조회할 수 있다.
하지만 여기서 IN 문에 들어가는 필터링 값이 동적이라는 것이 가장 큰 단점이다.
다음에는 서브쿼리 혹은 동적으로 PIVOT 테이블의 필터링 값을 정의 할 수 있는 PIVOT XML 을 알아보도록 하자.
728x90
반응형
'Database > SQL' 카테고리의 다른 글
[Oracle] "ORA-06502: PL/SQL: 수치 또는 값 오류: 문자열 버퍼가 너무 작습니다" 오류 해결 (0) | 2021.04.30 |
---|---|
[MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 (2) | 2021.01.26 |
[MySQL] 원하는 구분자 기준으로 문자열 자르기 : SUBSTRING_INDEX (0) | 2020.11.06 |
[HeidiSQL] HeidisSQL 에서 조회한 데이터 엑셀 내보내기 (8) | 2020.07.23 |
[Oracle] 숫자 0.5 문자 변환 시 ".5" ? "0.5" 로 표시하기 (0) | 2020.06.20 |
댓글