* 로우를 컬럼으로 전환하기
CREATE TABLE CH14_SCORE_TABLE (
YEARS VARCHAR2(4),
GUBUN VARCHAR2(30),
SUBJECTS VARCHAR2(30),
SCORE NUMBER);
① DECODE 또는 CASE
SELECT YEARS
, GUBUN
, SUM(국어) 국어
, SUM(영어) 영어
FROM (
SELECT YEARS
, GUBUN
, CASE WHEN SUBJECTS = '국어' THEN SCORE ELSE 0 END "국어"
, CASE WHEN SUBJECTS = '영어' THEN SCORE ELSE 0 END "영어"
FROM CH14_SCORE_TABLE
)
GROUP BY YEARS, GUBUN;
② WITH 절
WITH MAINS AS (
SELECT YEARS
, GUBUN
, CASE WHEN SUBJECTS = '국어' THEN SCORE ELSE 0 END "국어"
, CASE WHEN SUBJECTS = '영어' THEN SCORE ELSE 0 END "영어"
FROM CH14_SCORE_TABLE
)
SELECT YEARS
, GUBUN
, SUM(국어) 국어
, SUM(영어) 영어
FROM MAINS
GROUP BY YEARS, GUBUN;
③ PIVOT
SELECT *
FROM (
SELECT YEARS
, GUBUN
, SUBJECTS
, SCORE
FROM CH14_SCORE_TABLE
)
PIVOT (
SUM(SCORE)
FOR SUBJECTS IN ('국어', '영어')
);
* 컬럼을 로우로 전환
CREATE TABLE CH14_SCORE_COL_TABLE (
YEARS VARCHAR2(4),
GUBUN VARCHAR2(30),
KOREAN NUMBER,
ENGLISH NUMBER);
① UNION ALL
SELECT YEARS, GUBUN, '국어' SUBJECT, KOREAN SCORE
FROM CH14_SCORE_COL_TABLE
UNION ALL
SELECT YEARS, GUBUN, '영어' SUBJECT, ENGLISH SCORE
FROM CH14_SCORE_COL_TABLE
ORDER BY 1, 2 DESC;
② UNPIVOT
SELECT *
FROM CH14_SCORE_COL_TABLE
UNPIVOT (
SCORE
FOR SUBJECTS IN (
KOREAN '국어'
, ENGLISH '영어'
)
);
'Oracle' 카테고리의 다른 글
[오라클SQL과PLSQL을다루는기술] 17. 소스 관리와 디버깅 (0) | 2020.07.19 |
---|---|
[오라클SQL과PLSQL을다루는기술] 13. 동적SQL (0) | 2020.07.19 |
[오라클SQL과PLSQL을다루는기술] 12. 패키지 (0) | 2020.07.18 |
[오라클SQL과PLSQL을다루는기술]11. 커서, 레코드, 컬렉션 (0) | 2020.07.18 |
[오라클SQL과PLSQL을다루는기술] 10. PL/SQL 예외처리와 트랜잭션 (0) | 2020.07.11 |