WITH T AS ( SELECT '10000' KEY_VAL, 1 SEQ, 420 QTY FROM DUAL UNION ALL SELECT '10000' KEY_VAL, 2 SEQ, 420 QTY FROM DUAL UNION ALL SELECT '10000' KEY_VAL, 3 SEQ, 420 QTY FROM DUAL UNION ALL SELECT '10000' KEY_VAL, 4 SEQ, 420 QTY FROM DUAL UNION ALL SELECT '10000' KEY_VAL, 5 SEQ, 420 QTY FROM DUAL ) SELECT * FROM T ;
KEY_VAL | SEQ | QTY |
10000 | 1 | 420 |
10000 | 2 | 420 |
10000 | 3 | 420 |
10000 | 4 | 420 |
10000 | 5 | 420 |
위와같은 데이터를 기준값만큼만 데이터가 나오도록 차감시키고 싶습니다.
QTY2의 합은 기준값 (예시 : 1290) 이 됩니다.
결과는 아래와 같습니다.
KEY_VAL | SEQ | QTY1 | QTY2 |
10000 | 1 | 420 | 420 |
10000 | 2 | 420 | 420 |
10000 | 3 | 420 | 420 |
10000 | 4 | 420 | 30 |
10000 | 5 | 420 | 0 |
OVER문을 이용하면 금방나오겠다 생각했는데,
아직 내공이 많이 부족한것 같습니다.
선배님들의 조언을 얻고싶습니다.
제가 원하는 데이터가 잘 나오네요.
제가 너무 복잡하게만 생각하고있었던건 아닌가 싶습니다.
('SIGN 함수를 저렇게 사용하는구나' 도 배웠습니다.)
SELECT KEY_VAL, SEQ ,QTY1 ,LEAST(QTY1, QTY2, QTY3 - QTY2) V1 FROM ( SELECT KEY_VAL, SEQ ,QTY QTY1 --,SUM(QTY) OVER(ORDER BY SEQ) QTY2 ,SUM(QTY) OVER(ORDER BY SEQ ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) QTY2 ,1290 QTY3 FROM T ) ;
이것저것 해본다고 여기저기찾아서 이렇게까지 했는데 원하는게 안나와서 한참을 붙들고있었네요.
정말 감사드립니다. 즐거운 주말되세요.
WITH T AS ( SELECT '10000' KEY_VAL, 1 SEQ, 420 QTY FROM DUAL UNION ALL SELECT '10000' KEY_VAL, 2 SEQ, 420 QTY FROM DUAL UNION ALL SELECT '10000' KEY_VAL, 3 SEQ, 420 QTY FROM DUAL UNION ALL SELECT '10000' KEY_VAL, 4 SEQ, 420 QTY FROM DUAL UNION ALL SELECT '10000' KEY_VAL, 5 SEQ, 420 QTY FROM DUAL ) SELECT KEY_VAL ,SEQ ,QTY ,CASE WHEN GB < 1290 THEN QTY WHEN (1290 - LAG(GB) OVER(ORDER BY SEQ) )<0 THEN 0 WHEN GB > 1290 THEN 1290 -LAG(GB) OVER(ORDER BY SEQ)END QTY2 FROM(SELECT key_val ,SEQ ,qty , SUM(qty) OVER(ORDER BY seq) GB FROM T )
저도해봤는데 이렇게하는건 안되나여