[실습] (부서 & 직함별)로 자녀 수 합, 급여 합, 보너스 합 조회
|
WITH EMPP AS
(
SELECT 10 AS DEPTNO, 'CLERK' AS JOB, 7934 AS EMPNO, 'MILLER' AS ENAME, 1300 AS SAL, 200 AS BONUS, 3 AS CHLDN FROM DUAL UNION ALL
SELECT 10 AS DEPTNO, 'MANAGER' AS JOB, 7782 AS EMPNO, 'CLARK' AS ENAME, 2450 AS SAL, 100 AS BONUS, 0 AS CHLDN FROM DUAL UNION ALL
SELECT 10 AS DEPTNO, 'PRESIDENT' AS JOB, 7839 AS EMPNO, 'KING' AS ENAME, 5000 AS SAL, 0 AS BONUS, 2 AS CHLDN FROM DUAL UNION ALL
SELECT 20 AS DEPTNO, 'ANALYST' AS JOB, 7902 AS EMPNO, 'FORD' AS ENAME, 3000 AS SAL, 300 AS BONUS, 1 AS CHLDN FROM DUAL UNION ALL
SELECT 20 AS DEPTNO, 'ANALYST' AS JOB, 7788 AS EMPNO, 'SCOTT' AS ENAME, 3000 AS SAL, 600 AS BONUS, 1 AS CHLDN FROM DUAL UNION ALL
SELECT 20 AS DEPTNO, 'CLERK' AS JOB, 7876 AS EMPNO, 'ADAMS' AS ENAME, 1100 AS SAL, 200 AS BONUS, 1 AS CHLDN FROM DUAL UNION ALL
SELECT 20 AS DEPTNO, 'CLERK' AS JOB, 7369 AS EMPNO, 'SMITH' AS ENAME, 800 AS SAL, 200 AS BONUS, 4 AS CHLDN FROM DUAL UNION ALL
SELECT 20 AS DEPTNO, 'MANAGER' AS JOB, 7566 AS EMPNO, 'JONES' AS ENAME, 2975 AS SAL, 300 AS BONUS, 2 AS CHLDN FROM DUAL UNION ALL
SELECT 30 AS DEPTNO, 'CLERK' AS JOB, 7900 AS EMPNO, 'JAMES' AS ENAME, 950 AS SAL, 300 AS BONUS, 0 AS CHLDN FROM DUAL UNION ALL
SELECT 30 AS DEPTNO, 'MANAGER' AS JOB, 7698 AS EMPNO, 'BLAKE' AS ENAME, 2850 AS SAL, 400 AS BONUS, 1 AS CHLDN FROM DUAL UNION ALL
SELECT 30 AS DEPTNO, 'SALESMAN' AS JOB, 7521 AS EMPNO, 'WARD' AS ENAME, 1250 AS SAL, 500 AS BONUS, 0 AS CHLDN FROM DUAL UNION ALL
SELECT 30 AS DEPTNO, 'SALESMAN' AS JOB, 7844 AS EMPNO, 'TURNER' AS ENAME, 1500 AS SAL, 0 AS BONUS, 2 AS CHLDN FROM DUAL UNION ALL
SELECT 30 AS DEPTNO, 'SALESMAN' AS JOB, 7499 AS EMPNO, 'ALLEN' AS ENAME, 1600 AS SAL, 300 AS BONUS, 2 AS CHLDN FROM DUAL UNION ALL
SELECT 30 AS DEPTNO, 'SALESMAN' AS JOB, 7654 AS EMPNO, 'MARTIN' AS ENAME, 1250 AS SAL, 1400 AS BONUS, 3 AS CHLDN FROM DUAL
),
/* NON-PIVOT 결과 */
A AS (
SELECT DEPTNO,
JOB,
SUM(CHLDN) AS CHLDN
FROM EMPP
GROUP BY DEPTNO, JOB
),
/* PIVOT 결과 */
B AS
(
SELECT *
FROM
(
SELECT
DEPTNO, -- GROUP BY
JOB, -- GROUP BY (JOIN 불가)
JOB J, -- JOIN용
SAL, -- SUM(SAL)
BONUS -- SUM(BONUS)
FROM EMPP
)
PIVOT
(
SUM(SAL) AS SAL,
SUM(BONUS) AS BNS
FOR JOB IN ( 'CLERK' AS C,
'ANALYST' AS A,
'PRESIDENT' AS P,
'SALESMAN' AS S,
'MANAGER' AS M
)
)
) /* End of B */
SELECT A.DEPTNO AS A_DEPTNO,
A.JOB AS A_JOB,
A.CHLDN,
B.*
FROM A, /* NON-PIVOT 결과 */
B /* PIVOT 결과 */
WHERE A.DEPTNO = B.DEPTNO
AND A.JOB = B.J
ORDER BY A_DEPTNO, A_JOB;
참조
http://www.yes24.com/Product/Goods/46218018
http://blog.naver.com/PostView.nhn?blogId=silentis&logNo=220943488844
'DB' 카테고리의 다른 글
[DB, 정규식] PostgreSQL - '[코드]품명' 문자열에서 코드 추출하기 (0) | 2022.03.09 |
---|---|
[Oracle] 행 => 열 변환 PIVOT (CASE, DECODE 사용) (0) | 2020.10.31 |
[Oracle] 「다양한 예제로 쉽게 배우는 오라클 SQL과 PL/SQL」GROUPING SETS()함수 실습 (0) | 2020.10.31 |
[Oracle] SQL의 컨셉 for ORACLE 실습용 모델 ERD (0) | 2020.10.27 |
[Oracle] 계층형 쿼리 (feat. ASL 시즌 9 경기결과) (0) | 2020.10.10 |