3
4.5
6
11
이렇게 로우가 있고 11이란 값이 주어지면
0 3차감
0 4.5차감
2.5 3.5차감
이렇게 로우가 나오게 하고 싶은데
FOR문말고 하나의 SELECT 쿼리로 하는 방법 없을까요?
WITH t AS ( SELECT 1 rn, 3.0 v FROM dual UNION ALL SELECT 2, 4.5 FROM dual UNION ALL SELECT 3, 6.0 FROM dual UNION ALL SELECT 4, 11.0 FROM dual UNION ALL SELECT 5, 3.0 FROM dual ) SELECT x, rn, v , CASE WHEN s < x THEN v WHEN s - v < x THEN x - s + v ELSE 0 END use_v , CASE WHEN s < x THEN 0 WHEN s - v < x THEN s - x ELSE v END rem_v FROM (SELECT 11 x , rn , v , SUM(v) OVER(ORDER BY rn) s FROM t ) ;