예1 | |||||
파렛트 | 로트 | 재고수량 | |||
P1 | L1 | 15 | 입수수량 | 20 | |
P2 | L2 | 15 | |||
P3 | L3 | 15 | |||
결과값 | |||||
IN | |||||
P1 | L1 | 15 | |||
P1 | L2 | 5 | |||
#1 | L2 | 10 | |||
#1 | L3 | 10 | |||
#2 | L3 | 5 | |||
OUT | |||||
P1 | L1 | 15 | |||
P2 | L2 | 15 | |||
P3 | L3 | 15 | |||
예2 | |||||
파렛트 | 로트 | 재고수량 | |||
P1 | L1 | 30 | 입수수량 | 20 | |
결과값 | |||||
IN | |||||
P1 | L1 | 20 | |||
#1 | L2 | 10 | |||
OUT | |||||
P1 | L1 | 30 | |||
예3 | |||||
파렛트 | 로트 | 재고수량 | |||
P1 | L1 | 10 | 입수수량 | 20 | |
P2 | L1 | 5 | |||
결과값 | |||||
IN | |||||
P1 | L1 | 15 | |||
OUT | |||||
P1 | L1 | 10 | |||
P2 | L1 | 5 |
첫번째 예1를 말씀드리면 데이터를 IN, OUT으로 결과값을 만들어서 INSERT할려고 합니다.
입수 수량의 기준으로 조회를 하면 IN데이터의 처음의 값인 파렛트P1은 빠른순과 입수수량이 20개까지만 조회며 그다음 행부터는 #1, #2로 된부분은 신규로 입수수량 20이면 파렛트1개씩 채번하며 조회 될수있게 데이터가 나오면 되는데
쉽지가 않네요 PL/SQL로 하는중인데 잘 안되네요 ㅠ고수님들 도와주세요
WITH t AS ( SELECT 1 test_case, 'P1' pallet, 'L1' lot, 15 stock FROM dual UNION ALL SELECT 1, 'P2', 'L2', 15 FROM dual UNION ALL SELECT 1, 'P3', 'L3', 15 FROM dual UNION ALL SELECT 2, 'P1', 'L1', 30 FROM dual UNION ALL SELECT 3, 'P1', 'L1', 10 FROM dual UNION ALL SELECT 3, 'P2', 'L1', 5 FROM dual ) SELECT test_case , 'IN' gb , DECODE(lv, 1, 'P'||min_pallet, '#'||(lv - 1)) pallet , lot , SUM(LEAST( cnt , stock , lv * cnt - (s_stock - stock) , s_stock - (lv -1) * cnt ) ) stock FROM (SELECT test_case , pallet, lot, stock , MIN(TO_NUMBER(SUBSTR(pallet, 2))) OVER(PARTITION BY test_case) min_pallet , SUM(stock) OVER(PARTITION BY test_case ORDER BY pallet) s_stock FROM t -- WHERE test_case = 1 ) , (SELECT 20 cnt, LEVEL lv FROM dual CONNECT BY LEVEL < 99) WHERE s_stock - stock < lv * cnt AND s_stock > (lv - 1) * cnt GROUP BY test_case, lv, min_pallet, lot ORDER BY test_case, lv, lot ;