각기 다른 2개 테이블의 결과를 합치는 SQL 방법이 있을까요? (오라클 10g 입니다)
table1 - 거래일자, 상태1, 건수1
table2 - 거래일자, 상태2, 건수2, 결과
(각각의 table 은 실시간으로 생성되었다가 거래가 종료되면 삭제 됩니다. 그래서 상태코드는 유동적입니다.)
거래일자 | tab1_상태1 | tab1_건수1 | tab2_결과 | tab2_상태2 | tab2_건수2 |
---|---|---|---|---|---|
20201224 | 미처리 | 2 | 정상 | 정상 | 20 |
20201224 | 완료 | 24 | 오류 | 무응답 | 3 |
20201224 | 오류 | 번호오류 | 1 | ||
20201224 | 오류 | 타임아웃 | 2 | ||
20201224 | 처리합계 | 26 | 처리합계 | 26 |
WITH t1 AS ( SELECT '20201224' dt, '미처리' st, 2 cnt FROM dual UNION ALL SELECT '20201224', '완료' , 24 FROM dual ) , t2 AS ( SELECT '20201224' dt, '정상' rt, '정상' st, 20 cnt FROM dual UNION ALL SELECT '20201224', '오류', '무응답' , 3 FROM dual UNION ALL SELECT '20201224', '오류', '번호오류', 1 FROM dual UNION ALL SELECT '20201224', '오류', '타임아웃', 2 FROM dual ) SELECT dt , rn , NVL2(rn, MIN(st_1), '처리합계') st_1 , SUM(cnt1) cnt1 , NVL2(rn, MIN(rt_2), '처리합계') rt_2 , MIN(st_2) st_2 , SUM(cnt2) cnt2 FROM (SELECT dt , ROW_NUMBER() OVER(PARTITION BY dt ORDER BY 1) rn , st st_1 , cnt cnt1 , null rt_2 , null st_2 , null cnt2 FROM t1 UNION ALL SELECT dt , ROW_NUMBER() OVER(PARTITION BY dt ORDER BY 1) rn , null st_1 , null cnt1 , rt rt_2 , st st_2 , cnt cnt2 FROM t2 ) GROUP BY dt, ROLLUP(rn) ;