입고된 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 수량을 기반으로 맞는것을 가져오는건은 쉬운데
입고번호의 갯수에 다 맞춰져 있을때에만 뿌려줘야하는 부분이라 헷갈리네요
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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 ; |