입고된 data를 입고시킨후 해당입고번호에 따른 품목들을 전체 중단을 시켜야 로직이 필요합니다.
그래서 입고를 다 시킨후에, 그 입고번호의 item data를 불러오는걸 하려고 하는데..
문제는 입고시킨 다음 꼭 현장에서 다른액션을 하는경우가 발생해서.. 혹여 입고번호중 다른 액션이 있었다면 그 입고번호 전체를 불러오지 않게 하려고 합니다.
RCPTITEM | ||||
입고번호 | 품목 | 순번 | 수량 | LOC |
202001 | ABC01 | 1 | 1 | 1A0101 |
202001 | ABC02 | 2 | 1 | 1B0101 |
202001 | BB011 | 3 | 1 | 1C0101 |
202001 | BB012 | 4 | 10 | 1A0101 |
202001 | BB013 | 5 | 1 | 1B0101 |
202001 | BB014 | 6 | 1 |
1C0101 |
STOKM | ||
STOK | LOC | 수량 |
ABC01 | 1A0101 | 1 |
ABC02 | 1B0101 | 1 |
BB011 | 1C0101 | 1 |
BB012 | 1A0101 | 10 |
BB013 | 1B0101 | 1 |
BB014 | 1C0101 | 1 |
조회조건은 입고번호입니다. 쿼리를 어떻게 짜야할까요?
두개의 조건을 만족하는건 LOC과 ITEM , QTY 수량을 기반으로 맞는것을 가져오는건은 쉬운데
입고번호의 갯수에 다 맞춰져 있을때에만 뿌려줘야하는 부분이라 헷갈리네요
WITH rcptitem AS ( SELECT 202001 rcpt_no, 'ABC01' item, 1 seq, 1 cnt, '1A0101' loc FROM dual UNION ALL SELECT 202001, 'ABC02', 2, 1, '1B0101' FROM dual UNION ALL SELECT 202001, 'BB011', 3, 1, '1C0101' FROM dual UNION ALL SELECT 202001, 'BB012', 4, 10, '1A0101' FROM dual UNION ALL SELECT 202001, 'BB013', 5, 1, '1B0101' FROM dual UNION ALL SELECT 202001, 'BB014', 6, 1, '1C0101' FROM dual ) , stokm AS ( SELECT 'ABC01' item, '1A0101' loc, 1 cnt FROM dual UNION ALL SELECT 'ABC02', '1B0101', 1 FROM dual UNION ALL SELECT 'BB011', '1C0101', 1 FROM dual UNION ALL SELECT 'BB012', '1A0101', 10 FROM dual UNION ALL SELECT 'BB013', '1B0101', 1 FROM dual UNION ALL SELECT 'BB014', '1C0101', 1 FROM dual ) SELECT * FROM (SELECT a.rcpt_no, a.item, a.seq, a.cnt, a.loc , COUNT(a.item) OVER() cnt_a , COUNT(b.item) OVER() cnt_b FROM rcptitem a LEFT OUTER JOIN stokm b ON a.item = b.item AND a.loc = b.loc AND a.cnt = b.cnt WHERE a.rcpt_no = 202001 ) WHERE cnt_a = cnt_b ;