ํ์ด ์ ํ
ORACLE SCOTT ๊ณ์ EMP ํ ์ด๋ธ์์ 2๊ฐ์ ์นผ๋ผ์ ์ด์ฉํ์ฌ GROUP BY ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ดค์ต๋๋ค. ํ๊ณ ์ถ์ ์์ ์ GROUPINGํ ์นผ๋ผ์ ๊ฐ๋ก ์ธ๋ก์ถ์ผ๋ก ๋๊ณ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ค๊ณ ํฉ๋๋ค. CASE ํํ์์ด๋ DECODE ํจ์๋ฅผ ์ด์ฉํด์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ์ ์์ต๋๋ค.
DECODE ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ ํจ์๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ฉด์ ์ค๋ณต๋๋ ์์ ์ ํด์ผํฉ๋๋ค. ์์ ์์ ์ PIVOT ํจ์๋ฅผ ์ด์ฉํด์ ํด๊ฒฐํด๋ณด๊ฒ ์ต๋๋ค.
PIVOT ์ฌ์ฉ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
SELECT
*
FROM(
SELECT
DEPTNO
,JOB
,SAL
FROM EMP
) PIVOT(
AVG(SAL) FOR JOB IN (
'ANALYST' AS ANALYST
,'CLERK' AS CLERK
,'MANAGER' AS MANAGER
,'PRESIDENT' AS PRESIDENT
,'SALESMAN' AS SALESMAN
)
);
|
PIVOTํจ์๋ ํ์ ์ด๋ก ์ ํํด์ค๋๋ค. ์ฌ์ฉํ ๋ ํ ์ด๋ธ์ ๋ณด๊ณ ๋ณํ์ ํ๊ธฐ ๋๋ฌธ์ ๊ผญ ํ์ํ ์นผ๋ผ๋ง ์ฌ์ฉํด์ผํฉ๋๋ค. DEPTNO, JOB, SAL๋ง ์กฐํํ๋๋ก ํ๋๋ฐ ๋ง์ฝ EMPNO์ฒ๋ผ ๋ค๋ฅธ ์นผ๋ผ์ ํ ์ด๋ธ์ ๋ฃ์ด๋ฒ๋ฆฌ๋ฉด PIVOTํ ๋ ๊ฐ์ด ๊ทธ๋ฃจํํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
FOR์ ๋ค์ ์๋จ ์นผ๋ผ์ผ๋ก ์ฌ์ฉํ ๋ฐ์ดํฐ ์นผ๋ผ์ ์์น์ํค๊ณ ์ถ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ IN ํจ์ ์์ ๋ฃ์ต๋๋ค.
UNPIVOT ์ฌ์ฉ
PIVOT ํจ์๊ฐ ํ์ ์ด๋ก ์ ํํด์ฃผ๋ ํจ์์๋ค๋ฉด, UNPIVOT์ ์ด์ ํ์ผ๋ก ์ ํํ ์ ์๋ ํจ์ ์ ๋๋ค. ์ค์ต์ ์งํํ๊ธฐ ์ํด ๋จผ์ CTAS ๊ตฌ๋ฌธ์ ์ฌ์ฉํด์ PIVOTํ ํ ์ด๋ธ์ ๋ง๋ค์ด๋๊ฒ ์ต๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
CREATE TABLE PIVOT_EMP
AS
SELECT
*
FROM(
SELECT
DEPTNO
,JOB
,SAL
FROM EMP
) PIVOT(
AVG(SAL) FOR JOB IN (
'ANALYST' AS ANALYST
,'CLERK' AS CLERK
,'MANAGER' AS MANAGER
,'PRESIDENT' AS PRESIDENT
,'SALESMAN' AS SALESMAN
)
);
|
UNPIVOT ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ค์ ๋๋๋ ค๋ณด๊ฒ ์ต๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
|
SELECT
*
FROM PIVOT_EMP
UNPIVOT (
SAL FOR JOB IN (
ANALYST
,CLERK
,MANAGER
,PRESIDENT
,SALESMAN
)
);
|
UNPIVOT์ ์ฌ์ฉ๋ฒ๋ PIVOT์ด๋ ๋น์ทํฉ๋๋ค. ์๋จ์ ์๋ ์นผ๋ผ๋ช ์ INํจ์์ ์ธ์๋ก ๋ฃ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
PIVOT ์ฌ์ฉ์ ์ฃผ์์ฌํญ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
DROP TABLE PIVOT_EMP;
CREATE TABLE PIVOT_EMP
AS
SELECT
*
FROM(
SELECT
DEPTNO
,JOB
,SAL
FROM EMP
) PIVOT(
AVG(SAL) FOR JOB IN ( --PIVOT์ ALIAS๋ฅผ ์
'ANALYST'
,'CLERK'
,'MANAGER'
,'PRESIDENT'
,'SALESMAN'
)
);
|
PIVOT์ ์ฌ์ฉํด์ ํ ์ด๋ธ์ ๋ฐ๋ก ๋ง๋ค์ด ์ฃผ๋ ๊ฒฝ์ฐ๋ผ๋ฉด INํจ์์์ ALIAS๋ฅผ ๊ผญ ๋ฃ์ด์ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์์ ๊ฐ์ ํ ์ด๋ธ์ ๋ง๋ค๊ณ ์กฐํํ๋ฉด ์นผ๋ผ์ ๋ด์ฉ์ด ์๋ ์ฒ๋ผ ์์ ๋ฐ์ดํ์ ๊ฐ์ด ์์ฑ์ด ๋๋ฒ๋ฆฝ๋๋ค.
์กฐํ์ฉ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ ์ด๋ผ๋ฉด ๋ฌธ์ ๊ฐ ์์ง๋ง, ๋ง์ฝ ํด๋น ํ ์ด๋ธ์ UNPIVOTํ๊ฒ ๋๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์นผ๋ผ์ ๋ํ ์ธ์์ ๋ชปํฉ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
|
SELECT
*
FROM PIVOT_EMP
UNPIVOT (
SAL FOR JOB IN (
"'ANALYST'"
,"'CLERK'"
,"'MANAGER'"
,"'PRESIDENT'"
,"'SALESMAN'"
)
);
|
ํฐ ๋ฐ์ดํ๋ฅผ ์ด์ฉํด์ ์์ ๋ฐ์ดํ๊น์ง ์นผ๋ผ์ ์ผ๋ถ๋ก ์ธ์ํ๋ฉด UNPIVOT ์์ ์ ๋ฌธ์ ์์ด ๋ฉ๋๋ค. ํ์ง๋ง, ์์ ๋ฐ์ดํ๊น์ง ๋ฐ์ดํฐ์ ๋ค์ด๊ฐ ๊ฒ์์์ ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
๋๊ธ