안녕하세요 하루종일 용을 쓰며 이래 저래 해보는데 너무 안풀리네요 (제 실력이 진짜 너무 밑이라 자괴감까지;;;)
번호 코드 수
R1 A 10
R2 A 20
R3 A 30
코드 개별 수 일자
A B1 20 2019-01-01
A B2 20 2019-01-02
A B3 20 2019-01-05
A B4 15 2019-01-07
A B5 30 2019-01-08
...
R1, R2, R3 에 대해서 동시에 선 별 을 하게 되면
R1에 대해 A제품 10개가 B1이 20개이니 선별 대상이 됩니다.
결과 정보를 보면
개별 가능 수 번호 코드
B1 20 10 R1 A
B1 20 10 R2 A
B2 20 10 R2 A
B2 20 10 R3 A
B3 20 20 R3 A
DB는 집합으로 생각하라고 들었는데 어떻게 해야 될지요.
WITH req AS ( SELECT 'R1' no, 'A' cd, 10 qty FROM dual UNION ALL SELECT 'R2', 'A', 20 FROM dual UNION ALL SELECT 'R3', 'A', 30 FROM dual ) , inv AS ( SELECT 'A' cd, 'i001' lot, 20 qty, '2019-01-01' dt FROM dual UNION ALL SELECT 'A', 'i002', 20, '2019-01-02' FROM dual UNION ALL SELECT 'A', 'i003', 20, '2019-01-05' FROM dual UNION ALL SELECT 'A', 'i004', 15, '2019-01-07' FROM dual UNION ALL SELECT 'A', 'i005', 30, '2019-01-08' FROM dual ) SELECT a.cd , a.lot , a.dt , a.qty in_qty , b.qty req_qty , LEAST( a.s_qty - b.s_qty + b.qty , b.s_qty - a.s_qty + a.qty , a.qty , b.qty ) use_qty , b.no FROM (SELECT cd, lot, qty, dt , SUM(qty) OVER(PARTITION BY cd ORDER BY dt, lot) s_qty FROM inv ) a , (SELECT no, cd, qty , SUM(qty) OVER(PARTITION BY cd ORDER BY no) s_qty FROM req ) b WHERE a.cd = b.cd AND a.s_qty > b.s_qty - b.qty AND b.s_qty > a.s_qty - a.qty ORDER BY no, dt, lot ; -- http://gurubee.net/lecture/2837