안녕하세요. 누적 차감 쿼리 질문있습니다.
그냥 쭉 차감하면 쉬운데, 중간에 예외가 있어서 힘이 듭니다.
어떤거냐면...
WITH tab AS(
SELECT 'AA' GUBUN, 'ABC' MODEL, '20140101' YYYY, 3000 INV_QTY, 1000 S_QTY FROM DUAL UNION ALL
SELECT 'AA' GUBUN, 'ABC' MODEL, '20140102' YYYY, 1000 INV_QTY, 2000 S_QTY FROM DUAL UNION ALL
SELECT 'AA' GUBUN, 'ABC' MODEL, '20140103' YYYY, 0 INV_QTY, 2000 S_QTY FROM DUAL UNION ALL
SELECT 'AA' GUBUN, 'ABC' MODEL, '20140105' YYYY, 0 INV_QTY, 1000 S_QTY FROM DUAL UNION ALL
SELECT 'AA' GUBUN, 'ABC' MODEL, '20140106' YYYY, 0 INV_QTY, 1000 S_QTY FROM DUAL UNION ALL
SELECT 'AA' GUBUN, 'ABC' MODEL, '20140109' YYYY, 1000 INV_QTY, 1000 S_QTY FROM DUAL UNION ALL
SELECT 'AA' GUBUN, 'ABC' MODEL, '20140110' YYYY, 0 INV_QTY, 1000 S_QTY FROM DUAL UNION ALL
SELECT 'BB' GUBUN, 'AAA' MODEL, '20140106' YYYY, 0 INV_QTY, 1000 S_QTY FROM DUAL UNION ALL
SELECT 'BB' GUBUN, 'AAA' MODEL, '20140109' YYYY, 1000 INV_QTY, 1000 S_QTY FROM DUAL
)
SELECT GUBUN, MODEL, YYYY
, INV_QTY, S_QTY
--, SUM(INV_QTY) OVER(PARTITION BY GUBUN, MODEL ORDER BY YYYY) INV_ACCUM
--, SUM(S_QTY) OVER(PARTITION BY GUBUN, MODEL ORDER BY YYYY) S_ACCUM
, SUM(S_QTY) OVER(PARTITION BY GUBUN, MODEL ORDER BY YYYY) -
SUM(INV_QTY) OVER(PARTITION BY GUBUN, MODEL ORDER BY YYYY) NET_QTY
FROM TAB A
;
여기서 NET_QTY를 제대로 표현을 못하겠습니다.
어떻게 나와야 하냐면..
GUBUN, MODEL단위, YYYY순서로 INV_QTY를 S_QTY만큼 누적 차감하는데, 차감할게 없으면 S_QTY로 보여줘야 합니다.
그리고 다시 INV_QTY가 나오면 다시 차감되어야 하는데, 어떻게 해야 할지 모르겠습니다.
GUBUN |
MODEL |
YYYY |
INV_QTY |
S_QTY |
올바른 값 |
|
|
|
|
|
|
AA |
ABC |
20140101 |
3000 |
1000 |
-2000 |
당일 S_QTY에서 당일 재고 3000을빼면 재고 2000남음 |
|
|
|
|
|
AA |
ABC |
20140102 |
1000 |
2000 |
-1000 |
당일 S_QTY 2000에서, 앞전 재고 2000과 당일 재고 1000합한 3000을 뺌. 재고 1000남음 |
|
|
|
|
|
AA |
ABC |
20140103 |
0 |
2000 |
1000 |
당일 S_QTY 2000에서 .앞전재고 1000을 빼면, 1000이 남고, 재고가 없어짐 |
|
|
|
|
|
AA |
ABC |
20140105 |
0 |
1000 |
1000 |
앞전 재고가 없어졌기 때문에 당일 S_QTY값이 나와야 함 |
|
|
|
|
|
AA |
ABC |
20140106 |
0 |
1000 |
1000 |
앞전 재고가 없어졌기 때문에 당일 S_QTY값이 나와야 함 |
|
|
|
|
|
AA |
ABC |
20140109 |
1000 |
1000 |
0 |
당일 S_QTY가 1000에서 당일재고 1000 빼면 0가 되며, 재고모두 소진 |
|
|
|
|
|
AA |
ABC |
20140110 |
0 |
1000 |
|
앞전과 당일재고가 없으므로 S_QTY 1000 |
|
|
|
|
|
BB |
AAA |
20140106 |
0 |
1000 |
1000 |
|
|
|
|
|
|
BB |
AAA |
20140109 |
1000 |
1000 |
0 |
|
|
|
|
|
|
위 표와 같이 올바른 값이 나와야 합니다.
LAG쓰고, DECODE쓰고 해도 잘안되네요..
MODEL절은 가독성 때문에 지양하고 있습니다. 분석함수만으로 하고 싶습니다.
고수님들 도와주세요..