반응형
1. 행(row) -> 컬럼(column) : sum + decode 또는 pivot문
2. 컬럼(column) -> 행(row) : unpivot문
예제. 부서번호, 부서번호별 토탈 월급을 가로로 출력하는데 pivot문을 이용하세요.
1단계
SELECT *
FROM ( SELECT deptno, sal FROM emp);
2단계
SELECT *
FROM (SELECT deptno, sal
FROM emp)
PIVOT(SUM(sal) FOR deptno IN (10,20,30));
구조 :
Point ! 결과를 보기 위해 필요한 컬럼만 from절의 서브쿼리에 쓴다.
SELECT *
FROM (SELECT 결과를 보기 위해 필요한 컬럼,
FROM 대상 테이블)
PIVOT(보고싶은 연산 결과 FOR 대상컬럼 IN (출력시 컬럼명이 될 값 나열))
문제 244. 직업, 직업별 토탈월급을 가로로 출력하는데 PIVOT문을 써서 구현하시오.
SELECT *
FROM ( SELECT job, sal
FROM emp)
PIVOT ( SUM(sal) FOR job IN ('ANALYST' , 'CLERK', 'MANAGER' , 'PRESIDENT', 'SALESMAN'));
SELECT *
FROM ( SELECT job, sal
FROM emp)
PIVOT ( SUM(sal) FOR job IN ('ANALYST' AS "ANALYST",
'CLERK'AS "CLERK",
'MANAGER' AS "MANAGER",
'PRESIDENT' AS "PRESIDENT",
'SALESMAN'AS "SALESMAN"));
문제 245. 아래 괄호 안에 넣을 SQL을 작성하시오.
SELECT *
FROM ( SELECT job, sal
FROM emp)
PIVOT ( SUM(sal) FOR job IN ( ));
위의 피봇문 IN 옆에 직업을 일일이 입력해야하는 부분을 '나름' 소프트 코딩하기 위한 것.
SELECT '''' || job2 || '''' || ' as '||'"'||job2 || '"'|| ','
FROM (SELECT DISTINCT job AS job2
FROM EMP);
이렇게 한 결과값을 드래그해서 바로 괄호 안에 붙여넣으면, 일일이 쓰지 않아도 됨. (마지막 행의 콤마 제거)
코드를 그대로 넣는 것이 아님!!!! 결과값을 넣는 것!
굳이 그럴 필요는 없지만
마지막 행 콤마를 직접 제거하지 않고 한줄로 표현하고 싶다면?
LISTAGG까지 함께 쓰기
SELECT LISTAGG(job2_2,',') WITHIN GROUP (ORDER BY job2_2)
FROM (SELECT '''' || job2 || '''' || ' as '||'"'||job2 || '"' AS job2_2
FROM (SELECT DISTINCT JOB AS job2
FROM emp));
'Oracle DBA > SQL' 카테고리의 다른 글
20230629 (1) SQL 050 : 데이터 분석 함수로 누적 데이터 출력하기(SUM OVER) (0) | 2023.06.29 |
---|---|
20230628 (7) SQL 049 : COLUMN을 ROW 로 출력하기(UNPIVOT) (0) | 2023.06.28 |
20230628 (5) SQL 047 : ROW를 COLUMN으로 출력하기 1(SUM+DECODE) (0) | 2023.06.28 |
20230627 (4) SQL 046 : 데이터 분석 함수로 바로 전 행과 다음 행 출력하기(LAG, LEAD) (0) | 2023.06.28 |
20230627 (3) SQL 045 : 데이터 분석 함수로 데이터를 가로로 출력하기(LISTAGG) (0) | 2023.06.28 |