이번 카테시안 조인을 활용할 사례는 레코드를 생성시키는 것으로
계약번호에 대해 고객이 해약을 하여 정산을 거쳐 고객에게 지불할 보증금반환금과 청구해야할 위약금, 기기철거비용이 하나의 로우로 정보를 출력하고자 한다
먼저 테이블을 생성하면서 기존 컬럼형 테이블을 로우 행으로 만들 때 사용할 넘버가 해당된다
CREATE TABLE COPY_T(NO, NO2) AS
SELECT ROWNUM, SUBSTR(TO_CHAR(ROWNUM, '09'),2,2)
FROM TEST99
WHERE ROWNUM <=31;
위와 같이 만들면 NO, NO2의 두 개의 컬럼과 31개의 로우 수를 가지는 테이블이 된다
INSET into 전표테이블 (생성일자, ..., ..., 계정과목, 금액, ... )
SELECT to_char(sysdate, ‘yyyymmdd’),
CASE y.no WHEN 1 THEN ‘1234’
WHEN 2 THEN ‘5678’
WHEN 3 THEN ‘9876’
END,
CASE y.no WHEN 1 THEN 보증금반환금
WHEN 2 THEN 위약금
WHEN 3 THEN 기기철거비
FROM 계약정산테이블 x, COPY_T y
WHERE x.해약일 = :input_date <- PL/SQL
AND y.no in ( CASE 보증금반환금 WHEN 0 THEN null ELSE 1 END,
CASE 위약금 WHEN 0 THEN null ELSE 2 END,
CASE 기기철거비 WHEN 0 THEN null ELSE 3 END )
<결과>
2019-09-23 1234 보증금 반환금
2019-09-23 5678 위약금
2019-09-23 9876 기기철거비
카테시안으로 조인한 다음 조건문을 주고 그에 대해 결합을 한다
일반적인 '='이퀴조인이 아닌 카테시안 곱이 사용하과 CASE문을 활용하여 조인을 한 형태이다
이렇게 최대한의 로우 수를 줄여서 조인을 할 수 있는 방법을 더 생각해 보아야겠다
'IT_Web > Oracle' 카테고리의 다른 글
Oracle - 날짜 빼고 더하는 계산 함수 (0) | 2020.05.26 |
---|---|
Oracle - 선수금 월별 매출 처리 쿼리 - 카테시안곱, CASE 문을 이용한 조인 방법 (0) | 2020.05.26 |
Oracle - 데이터 연결의 다양한 방법 (0) | 2020.05.22 |
Oracle 컬럼 합계와 행 합계 동시에 만들어서 출력, 윈도우함수 (0) | 2020.03.09 |
Oracle 특정 컬럼의 제품을 제품별, 등급별, 특정 등급으로 관리, 차액의 비율, CASE, ROLLUP, GROUP BY 활용 (0) | 2020.03.09 |