sql 문의 드립니다. 0 1 2,559

by lgxj20 [PL/SQL] megre insert update for loop [2023.02.15 15:56:32]



안녕하세요 megre, insert, update for loop 이용해서 pl/sql을 작성하려는데요

1.테이블A(입력한 테이블), 2테이블B(실제 택배 박스에 들어있는 테이블)

이슈는 테이블A/B가 동일할때는 발생을 안하는데

마약 A테이블(입력한 테이블)과ㅓ B테이블(실제 박스에 들어있는 테이블)이 다를때 B테이블데이타가 적거나 클때

첨부한 사진을 보시면 조금더 이해하실수 있을거 같습니다.

어떤식으로 처리를해야 되는지 문의 드립니다.

by 마농 [2023.02.16 01:25:07]
WITH t1 AS
(
SELECT 1 idx, 'AA' scd, 'A스타일'snm, '011' ccd, 'BEIGE' cnm, 0 rfid, 100 sz, 1 cnt, 'GG' box FROM dual
UNION ALL SELECT 2, 'BB', 'B스타일', '012', 'CHARCOAL'   , 0, 200, 3, 'GG' FROM dual
UNION ALL SELECT 3, 'CC', 'C스타일', '013', 'OMAHA BEIGE', 0, 300, 1, 'GG' FROM dual
UNION ALL SELECT 4, 'DD', 'D스타일', '014', 'IVORY'      , 0, 400, 1, 'GG' FROM dual
UNION ALL SELECT 5, 'DD', 'D스타일', '014', 'IVORY'      , 0, 400, 1, 'GG' FROM dual
)
, t2 AS
(
SELECT 1 idx, 'AA' scd, 'A스타일'snm, '011' ccd, 'BEIGE' cnm, 0 rfid, 100 sz, 2 cnt, 'GG' box FROM dual
UNION ALL SELECT 2, 'BB', 'B스타일', '012', 'CHARCOAL'   , 0, 200, 2, 'GG' FROM dual
UNION ALL SELECT 3, 'CC', 'C스타일', '013', 'OMAHA BEIGE', 0, 300, 0, 'GG' FROM dual
UNION ALL SELECT 4, 'DD', 'D스타일', '014', 'IVORY'      , 0, 400, 3, 'GG' FROM dual
)
SELECT a.idx idx_1
     , b.idx idx_2
     , a.scd, a.snm, a.ccd, a.cnm, a.rfid, a.sz, a.box
     , a.cnt cnt_1
     , LEAST(a.cnt, NVL(b.cnt, 0) - a.s_cnt + a.cnt) cnt_2
  FROM (SELECT idx, scd, snm, ccd, cnm, rfid, sz, cnt, box
             , SUM(cnt) OVER(PARTITION BY scd ORDER BY idx) s_cnt
          FROM t1
        ) a
  LEFT OUTER JOIN t2 b
    ON a.scd = b.scd
   AND a.s_cnt - a.cnt < b.cnt
 UNION ALL
SELECT a.idx_1
     , b.idx idx_2
     , b.scd, b.snm, b.ccd, b.cnm, b.rfid, b.sz, b.box
     , b.cnt - NVL(a.s_cnt, 0) cnt_1
     , b.cnt - NVL(a.s_cnt, 0) cnt_2
  FROM (SELECT scd
             , MAX(idx) + 0.1 idx_1
             , SUM(cnt) s_cnt
          FROM t1
         GROUP BY scd
        ) a
 RIGHT OUTER JOIN t2 b
    ON a.scd = b.scd
 WHERE b.cnt > NVL(a.s_cnt, 0)
 ORDER BY 1, 2
;

 

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