쿼리 질문 드립니다. 0 2 932

by 후후 [SQL Query] [2022.06.21 16:47:17]


재고 table : tb_aa

이동 table : tb_bb

A 품번 : 칼라 00 재고 10장, 칼라 01 재고 5장

           칼라 02 재고 -1장, 칼라 03 재고 -3장, 칼라 04 재고 -3장, 칼라 05 재고 -8장

00칼라 01칼라 합 15장을 02, 03, 04, 05 칼라 마이너스 수량만큼 이동시켜 주려 합니다.

------------------------------

insert into tb_bb

select 'A', '00', 'A', '02', '1'

from tb_AA

-------------------------------

간략히 이동을 시켜주는 쿼리이긴한데 데이터의 양이 방대하여 간편히 처리해야 할것 같습니다

by 마농 [2022.06.22 08:49:11]

WITH tb_aa AS
(
SELECT 'A' item, '00' code, 10 cnt FROM dual
UNION ALL SELECT 'A', '01',  5 FROM dual
UNION ALL SELECT 'A', '02', -1 FROM dual
UNION ALL SELECT 'A', '03', -3 FROM dual
UNION ALL SELECT 'A', '04', -3 FROM dual
UNION ALL SELECT 'A', '05', -8 FROM dual
)
, tmp AS
(
SELECT item
     , code
     , SIGN(cnt) gb
     , ABS(cnt) cnt
     , SUM(ABS(cnt)) OVER(PARTITION BY item, SIGN(cnt) ORDER BY code) s_cnt
  FROM tb_aa
)
SELECT a.item
     , a.code code_1
     , b.code code_2
     , LEAST( a.s_cnt - b.s_cnt + b.cnt
            , b.s_cnt - a.s_cnt + a.cnt
            , a.cnt
            , b.cnt
            ) cnt
  FROM tmp a
     , tmp b
 WHERE a.gb =  1
   AND b.gb = -1
   AND a.item = b.item
   AND a.s_cnt > b.s_cnt - b.cnt
   AND b.s_cnt > a.s_cnt - a.cnt
 ORDER BY a.item, a.code, b.code
;
-- http://gurubee.net/lecture/2837

by 후후 [2022.06.22 14:39:02]

댓글 달아주신 쿼리 변형해서 업무 처리 했습니다.

 

감사합니다.

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