안전재고를 감안한 생산수량을 계산하는 쿼리를 만들 수 있을까요?
(기말재고는 최소한 안전재고를 보장하는 생산필요량이 계산돠어야 함)
※ MS-SQL 2014 버전 기준에 맞는 1QUERY를 구현하고자 합니다.
TABLE | ITEM_INV | ||||
품목코드 | 기초재고 | 안전재고 | |||
PA010 | 50,000 | 30,000 | |||
PA020 | 65,000 | 34,000 | |||
TABLE | SALE_SUPP | ||||
품목코드 | 년-주차 | 판매수요 | |||
PA010 | 2021-1 | 20,000 | |||
PA010 | 2021-2 | 15,000 | |||
PA010 | 2021-3 | 25,000 | |||
PA010 | 2021-4 | 0 | |||
PA010 | 2021-5 | 55,000 | |||
PA020 | 2021-1 | 10,000 | |||
PA020 | 2021-2 | 53,000 | |||
PA020 | 2021-3 | 0 | |||
PA020 | 2021-4 | 35,000 | |||
PA020 | 2021-5 | 15,000 | |||
결과 | |||||
품목 | 년-주차 | 기초재고 | 판매수요량 | 생산필요량 | 기말재고 |
PA010 | 2021-1 | 50,000 | 20,000 | 0 | 30,000 |
PA010 | 2021-2 | 30,000 | 15,000 | 15,000 | 30,000 |
PA010 | 2021-3 | 30,000 | 25,000 | 25,000 | 30,000 |
PA010 | 2021-4 | 30,000 | 0 | 0 | 30,000 |
PA010 | 2021-5 | 30,000 | 55,000 | 55,000 | 30,000 |
PA010 | 2021-1 | 65,000 | 10,000 | 0 | 55,000 |
PA010 | 2021-2 | 55,000 | 53,000 | 32,000 | 34,000 |
PA010 | 2021-3 | 34,000 | 0 | 0 | 34,000 |
PA010 | 2021-4 | 34,000 | 35,000 | 35,000 | 34,000 |
PA010 | 2021-5 | 34,000 | 15,000 | 15,000 | 34,000 |
감사합니다,
년_주차의 표시가 주차 부분이 1자리 인데?
2자리 주차와 함께 표시되면 정렬하기가 어려워지는데요.
2021-01 처럼 고정 자리수로 표시되면 좋은데요.
WITH item_inv(품목코드, 기초재고, 안전재고) AS ( SELECT 'PA010', 50000, 30000 UNION ALL SELECT 'PA020', 65000, 34000 ) , sale_supp(품목코드, 년_주차, 판매수요) AS ( SELECT 'PA010', '2021-1', 20000 UNION ALL SELECT 'PA010', '2021-2', 15000 UNION ALL SELECT 'PA010', '2021-3', 25000 UNION ALL SELECT 'PA010', '2021-4', 0 UNION ALL SELECT 'PA010', '2021-5', 55000 UNION ALL SELECT 'PA020', '2021-1', 10000 UNION ALL SELECT 'PA020', '2021-2', 53000 UNION ALL SELECT 'PA020', '2021-3', 0 UNION ALL SELECT 'PA020', '2021-4', 35000 UNION ALL SELECT 'PA020', '2021-5', 15000 ) , item_tmp AS ( SELECT a.품목코드 , b.년_주차 , a.안전재고 , a.기초재고 , b.판매수요 , CASE WHEN a.안전재고 > (a.기초재고 - b.판매수요) THEN a.안전재고 - (a.기초재고 - b.판매수요) ELSE 0 END 생산필요 , CASE WHEN a.안전재고 > (a.기초재고 - b.판매수요) THEN a.안전재고 ELSE (a.기초재고 - b.판매수요) END 기말재고 FROM item_inv a INNER JOIN sale_supp b ON a.품목코드 = b.품목코드 WHERE b.년_주차 = '2021-1' UNION ALL SELECT a.품목코드 , b.년_주차 , a.안전재고 , a.기말재고 기초재고 , b.판매수요 , CASE WHEN a.안전재고 > (a.기말재고 - b.판매수요) THEN a.안전재고 - (a.기말재고 - b.판매수요) ELSE 0 END 생산필요 , CASE WHEN a.안전재고 > (a.기말재고 - b.판매수요) THEN a.안전재고 ELSE (a.기말재고 - b.판매수요) END 기말재고 FROM item_tmp a INNER JOIN sale_supp b ON a.품목코드 = b.품목코드 WHERE b.년_주차 = SUBSTRING(a.년_주차, 1, 4) + '-' + CAST(SUBSTRING(a.년_주차, 6, 2) + 1 AS VARCHAR) ) SELECT * FROM item_tmp ORDER BY 품목코드 , SUBSTRING(년_주차, 1, 4) , SUBSTRING(년_주차, 6, 2) + 0 ;