각기 다른 2개 테이블의 결과를 합치는 SQL 방법이 있을까요? 0 2 749

by 별님 [SQL Query] [2020.12.24 17:11:56]


각기 다른 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

 

by 마농 [2020.12.24 18:25:15]
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)
;

 


by 별님 [2020.12.24 18:30:40]

감사합니다.  메리 크리스마스!...

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입