순차 차감 월별로 누적 시키는거 해보고있는데, 로직만으로 가능할지 궁금합니다 0 1 2,935

by 새싹 [2023.11.13 15:48:36]


만약 202310월 과 202311월이 차감되면서,
 
202311월에는 202310월에 차감된것 까지 똑같이 적용하고싶다면 
 
SQL 로직만으로도 구성이 가능할까요???
 
프로시저에서 FOR문 쓰는 방식으로 고민해봐야할까요

원하는답 

202310 을 차감하고

202311 에는 202310 + 202311 수량을 차감합니다.

MONTH 제품 수량 창고A 창고B 창고C 창고D
202310 A 50 100 100 100 50
202310 B 150 100 100 50 0
202310 C 250 100 50 0 0
202311 A 50 100 100 100 100
202311 B 150 100 0 0 0
202311 C 250 0 0 0 0

WITH t AS
(
SELECT '202310' month, 'A' 제품, 50 수량 FROM dual
UNION ALL SELECT '202310', 'B', 150 FROM dual
UNION ALL SELECT '202310', 'C', 250 FROM dual
UNION ALL SELECT '202311' month, 'A' 제품, 50 수량 FROM dual
UNION ALL SELECT '202311', 'B', 150 FROM dual
UNION ALL SELECT '202311', 'C', 250 FROM dual
)
, s AS
(
SELECT '202310' month, 'A' 제품, 100 창고A, 100 창고B, 100 창고C, 100 창고D FROM dual
UNION ALL SELECT '202310', 'B', 100, 100,100, 100 FROM dual
UNION ALL SELECT '202310', 'C', 100, 100,100, 100 FROM dual 
UNION ALL SELECT '202311' month, 'A' 제품, 100 창고A, 100 창고B, 100 창고C, 100 창고D FROM dual
UNION ALL SELECT '202311', 'B', 100, 100,100, 100 FROM dual
UNION ALL SELECT '202311', 'C', 100, 100,100, 100 FROM dual 
)
SELECT a.month
     , a.제품
     , a.수량
     , LEAST(b.창고A, GREATEST(0, b.창고D + b.창고C + b.창고B + b.창고A - a.수량)) 창고a
     , LEAST(b.창고B, GREATEST(0, b.창고D + b.창고C + b.창고B           - a.수량)) 창고b
     , LEAST(b.창고C, GREATEST(0, b.창고D + b.창고C                     - a.수량)) 창고c
     , LEAST(b.창고D, GREATEST(0, b.창고D                               - a.수량)) 창고d
  FROM t a
     , s b
 WHERE a.month = b.month
   AND a.제품 = b.제품
;

 

by 마농 [2023.11.13 16:07:06]

원질문도 그렇고 수정 질문도 그렇고 억지로 만들어 드릴 수 는 있는데.
테이블이 정규화가 안되어 있어서 데이터도 이상하고 쿼리도 이상합니다.
테이블을 정규화 한 상태에서 SQL을 작성해야 이상하지 않습니다.
지금 제시해 주신 데이터는 뭔가 이상합니다.
이런식의 설계는 추천하지 않습니다.
일단 답변은 원질문글에 달았습니다.

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