카티시안(Cartesian) 곱을 이용한 조인
어떤 제품의 월별로 매출집계를 보고자 한다면 매출이 발생하지 않은 달에도 매출이 없다는 다는 것을 알기 위해 0값을 가진 로우를 출력하는 것이 좋을 것이다 이와 같이 발생한 값의 유무에 관계 없이 고정된 양식에 로우를 출력하고자 한다면 생각보다 쉽지는 않다
SELECT y.계정명,
sum(decode(x.공정, ‘원사’, 금액)) 원사,
sum(decode(x.공정, ‘제작’, 금액)) 재직,
sum(decode(x.공정, ‘기모’, 금액)) 기모,
sum(decode(x.공정, ‘염색’, 금액)) 염색,
sum(decode(x.공정, ‘가공’, 금액)) 가공
FROM
(SELECT substr(계정과목, 1, 2) 항목, 공정, sum(금액) 금액
FROM 전표테이블
WHERE 사업장 = ‘울산공장’
and 전표일자 like :작업월||‘%’
and 계정과목 between ‘1234’ and ‘6543’
GROUP BY substr(계정과목, 1, 2), 공정) x
, 계정테이블 y
WHERE y.계정과목 between ‘1200’ and ‘6500’
and y.항목분류 = ‘1’
and x.항목(+) = substr(y.계정과목, 1, 2)
GROUP BY y.계정명;
테이블에 항목을 나타낼수 있는 계정과목 같은 테이블이 개별적으로 존재한다면 그 테이블을 이용하여 카티시안 조인과 outer 조인을 활용하여 정보가공은 전표테이블로 가공을 하고 계정명은 과목만 나타나있는 계정테이블을 활용하여 select를 한다
항목 분류가 중요한 이유는 집합은 테이터 발생 상황에 따라 값이 존재하지 않는 계정과목이 생길 수가 있다 그래서 계정테이블이 출력한 로우 단위인 계정들만 추출하여 GROUP BY한 집합을 OUTER 조인을 하기 위함이다
하지만 항목분류번호는 없을 수 있다 그 경우는 임시테이블을 만들어서 항목별로 분류코드를 부여하여 활용하면 된다
'IT_Web > Oracle' 카테고리의 다른 글
오라클 트리구조 완벽 이해하기 oracle start with connect by 사용법 (0) | 2022.07.13 |
---|---|
오라클 한번에 여러 테이블 데이터 삽입, oracle INSERT ALL하기 (0) | 2022.07.11 |
Oracle - 카테시안(Cartesian) 곱을 이용한 조인 – 관계가 없는 테이블간의 조인 (0) | 2020.05.28 |
Oracle - 날짜 빼고 더하는 계산 함수 (0) | 2020.05.26 |
Oracle - 선수금 월별 매출 처리 쿼리 - 카테시안곱, CASE 문을 이용한 조인 방법 (0) | 2020.05.26 |