hyeonga_code
Database_63_DML 응용_PIVOTING INSERT 본문
-- Advanced DML
-- PIVOTING INSERT
-- 비관계형 데이터베이스 테이블과 같은 입력 레코드를 관계형 데이터베이스 테이블 환경 레코드로 변환하는 변형 작업을 수행합니다.
-- ALL 다중 INSERT 구문을 활용하여 비관계형 테이블 열의 각 데이터를 관계형 테이블의 행으로 변환해야 합니다.
-- 반복되는 행을 모두 컬럼으로 지정하게 되면 NULL 값을 가지는 컬럼이 많아지게 됩니다.
-- 영수증, 거래 명세표, 세금 계산서 등 장표 구성
-- 사용할 데이터를 조회합니다.
SELECT * FROM sales_source_data;
-- 요일별로 데이터가 분리되어 있어 그룹 연산을 할 수 없습니다.
-- 요일 속성이 반복되고 있습니다.
-- 관계 데이터 테이블은 반복되는 속성을 하나로 묶어 하나의 속성으로 작성해야 합니다.
-- 채워넣을 테이블을 조회합니다.
SELECT * FROM sales_info;
-- 매출 번호를 입력하기 위해 SALES_ID를 지정합니다.
-- 요일별 분석을 위해 SALES_DAY를 지정합니다.
-- SALES_INFO 테이블의 속성을 조회합니다.
DESC sales_info;
/*
이름 널? 유형
----------- -- -----------
SALES_ID NUMBER(6)
EMPLOYEE_ID NUMBER(6)
WEEK_ID NUMBER(2)
SALES_DAY CHAR(3)
SALES NUMBER(8,2)
*/
-- 데이터를 삽입합니다.
-- 5일을 가진 4열을 실행하므로 20번 실행해야 합니다.
-- 직원 번호가 주차에 요일에 얼마를 판매했습니다.
INSERT ALL
INTO sales_info VALUES ( 1, employee_id, week_id, 'MON', sales_MON)
INTO sales_info VALUES ( 1, employee_id, week_id, 'TUE', sales_TUE)
INTO sales_info VALUES ( 1, employee_id, week_id, 'WED', sales_WED)
INTO sales_info VALUES ( 1, employee_id, week_id, 'THU', sales_THUR)
INTO sales_info VALUES ( 1, employee_id, week_id, 'FRI', sales_FRI)
-- 5일이므로 한 행에서 5번을 삽입해야 합니다.
SELECT employee_id, week_id, sales_MON, sales_TUE, sales_WED, sales_THUR, sales_FRI
FROM sales_source_data;
/*
20개 행 이(가) 삽입되었습니다.
*/
-- SALES_INFO 테이블을 조회합니다.
SELECT * FROM sales_info;
-- 기본키를 선정하기 위해 EM_ID, WEEK_ID, SALES_DAY, SALES를 묶어야할 수도 있습니다.
-- 유니크한 키를 만들기 위함입니다.
-- 너무 길어질 수 있습니다.
-- 설계에는 없지만 기본 키를 위해 인위적으로 열을 추가합니다.
-- 시퀀스를 사용하여 일련변호를 업데이트 합니다.
UPDATE sales_info
SET sales_id=sales_info_seq.NEXTVAL;
/*
20개 행 이(가) 업데이트되었습니다.
*/
-- SALES_INFO 테이블을 조회합니다.
SELECT * FROM sales_info;
-- 주 수별, 사원별 실적을 조회합니다.
SELECT week_id, employee_id, SUM(sales)
FROM sales_info
GROUP BY ROLLUP (week_id, employee_id);
-- 복구합니다.
ROLLBACK;
/*
롤백 완료.
*/
'Oracle Database' 카테고리의 다른 글
Database_65_DML 응용_FLASHBACK (0) | 2023.08.20 |
---|---|
Database_64_DML 응용_MERGE UPSERT (0) | 2023.08.20 |
Database_62_DML 응용_다중 INSERT, 조건 ALL INSERT, 조건 FIRST INSERT (0) | 2023.08.20 |
Database_61_SQL 활용 실습 8 (0) | 2023.08.19 |
Database_61_SQL 활용 실습 7 (0) | 2023.08.19 |