안녕하세요 megre, insert, update for loop 이용해서 pl/sql을 작성하려는데요
1.테이블A(입력한 테이블), 2테이블B(실제 택배 박스에 들어있는 테이블)
이슈는 테이블A/B가 동일할때는 발생을 안하는데
마약 A테이블(입력한 테이블)과ㅓ B테이블(실제 박스에 들어있는 테이블)이 다를때 B테이블데이타가 적거나 클때
첨부한 사진을 보시면 조금더 이해하실수 있을거 같습니다.
어떤식으로 처리를해야 되는지 문의 드립니다.
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
;