어떤 대상을 선별하는데 수량을 계산해서 제품들을 선별해야 되는데요. 진짜 어렵네요... 0 2 537

by 권오창 [SQL Query] [2019.02.27 18:29:09]


안녕하세요 하루종일 용을 쓰며 이래 저래 해보는데 너무 안풀리네요 (제 실력이 진짜 너무 밑이라 자괴감까지;;;)

번호  코드  수
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는 집합으로 생각하라고 들었는데 어떻게 해야 될지요.

by 마농 [2019.02.28 08:35:10]
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

 


by 권오창 [2019.02.28 14:34:12]

마농님은 신입니다..

마농신

오늘 아침 출근해서 한줄한줄 그리고 링크주신 곳 가서 공부해봤습니다.

DB쪽은 그래도 이래저래 해왔다고 봤는데 제가 초보중에 초보란걸 인지했습니다.

감사합니다!! 공부해서 더 발전해야겠습니다~

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