- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
ORACLE PIVOT 쿼리 - 가로세로변환, ROW 단위 자료를 COLUMN 단위 자료로 변환1(개념)
2020.06.12 17:31
PIVOT 쿼리 - 가로세로변환, ROW 단위 자료를 COLUMN 단위 자료로 변환1(개념)
http://www.soqool.com/servlet/board?cmd=view&cat=100&subcat=1010&seq=180 에서 가져온 것들과 내 방식들.
이곳에는 ROW 단위 자료를 COLUMN 단위 자료로 변환하는 예제밖에 없음.
** SELECT 한 RESULTSET(데이타가 세로로 나옴) 을 여러 컬럼으로 나누는(=가로로 만드는) 순서.
참고 : 보통 select 절에 count(decode(...)), sum(decode(...)), max(decode(...)) 등의 함수를 많이 쓴다.
그림으로 표현하면 다음과 같다.
1. 무엇인가 SELECT 한 RESULTSET 이 아래와 같다고 한다면,
| 컬럼1 | 컬럼2 |
| DATA1 | DATA11 |
| DATA2 | DATA12 |
| DATA3 | DATA13 |
| DATA4 | DATA14 |
| DATA5 | DATA15 |
| DATA6 | DATA16 |
2. 여기 한 컬럼의 데이타들은 필드명으로 만들고 다른 한 컬럼의 데이타들을 대각선 모양으로 변경한다. DECODE 문을 이용하면 아래처럼 대각선 형태로 변경된다.
대각선 모양을 만드는 방법은 다양하다.
- ceil(),mod() 함수 이용 후 decode 하는 방법
- union all 한 후 decode 하는 방법
- row_number() over(..) 분석함수 사용후 decode 하는 방법등등.
| ** 분석용 함수 ROW_NUMBER() 등으로 특정 그룹이 그 그룹안에 있는 ROW 들은 모두 같은 번호도 갖게 하고 그 그룹안에서 각 ROW 마다 서로 다른 번호도 갖도록 할 것. 예) 'PIVOT 쿼리 - 가로세로변환, ROW 단위 자료를 COLUMN 단위 자료로 변환2(예제2)' 게시물의 4번 정리한 예제 참조해 볼 것.
|
세로로 나온 데이타들을 가로로 나오도록 대각선 형태로 변경하고 일련번호들을 붙인다.
| DATA1 | DATA2 | DATA3 | DATA4 | DATA5 | DATA6 | 일련번호 |
| DATA11 | 1 | |||||
| DATA12 | 2 | |||||
| DATA13 | 3 | |||||
| DATA14 | 4 | |||||
| DATA15 | 5 | |||||
| DATA16 | 6 |
3. SELECT MAX(DECODE(...) 등의 쿼리를 쓰면 아래처럼 가로로 변환된다.
아래에서 보듯 데이타들 (중 일부)이 필드명이 된다.
| DATA1 | DATA2 | DATA3 | DATA4 | DATA5 | DATA6 |
| DATA11 | DATA12 | DATA13 | DATA14 | DATA15 | DATA16 |
4. 가로로 만들 대상이 여러 필드일 때도 마찬가지임.
예를 들어 아래와 같은 resultset 이 있다할 때,
| c1 | c2 | c3 |
| 1 | 4 | 7 |
| 2 | 5 | 8 |
| 3 | 6 | 9 |
이걸 다음과 같이 바꾸고 싶다면,
| c4 | c5 | c6 |
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
반드시 아래처럼 먼저 대각선 모양으로 변경해야 함.
| c1 | c2 | c3 | 일련번호 |
| 1 | 1 | ||
| 2 | 2 | ||
| 3 | 3 | ||
| 4 | 1 | ||
| 5 | 2 | ||
| 6 | 3 | ||
| 7 | 1 | ||
| 8 | 2 | ||
| 9 | 3 |
대각선 모양을 만드는 방법은 다양하다.
- ceil(),mod() 함수 이용 후 decode 하는 방법
- union all 한 후 decode 하는 방법
- row_number() over(..) 분석함수 사용후 decode 하는 방법등등.
5. 실례1
SCOTT/TIGER 로 로그인하여 아래 쿼리를 날리면...
|
RESULTSET 은 아래와 같다.

세로로 나온 데이타들을 가로로 나오도록 하기 위해 일단 RESULTSET 을 대각선 모양으로 변경해야 한다.
아래의 쿼리를 이용한다.
|
SELECT DECODE(DEPTNO, 10, A, NULL) deptno_10, COUNT(EMPNO) A |
위의 쿼리를 날리면 아래와 같은 모양이 된다.

최종적인 SQL 은 다음과 같다.
|
SELECT MAX(DECODE(DEPTNO, 10, A, NULL)) deptno_10, COUNT(EMPNO) A |
위의 쿼리를 실행하면 아래와 같은 RESULTSET 으로 바꾼다.

[출처] https://blog.naver.com/acatholic/90148967758
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86307 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 78758 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95506 |

