-- 제시된 금액(8)을 첫번째 레코드부터 순차적으로 차감하기
SELECT T.PRC
, SUM(T.PRV_PRC) OVER (ORDER BY ROWNUM) AS COL1 -- 이전금액까지의 차감한 누적액
, 8 - SUM(T.PRV_PRC) OVER (ORDER BY ROWNUM) AS COL2 -- 이전레코드까지 차감한 결과 즉 현재 레코드에 차감해야 할 금액
, T.PRC - LEAST(DECODE(SIGN(8 - SUM(T.PRV_PRC) OVER (ORDER BY ROWNUM)), -1, 0, 8 - SUM(T.PRV_PRC) OVER (ORDER BY ROWNUM)), T.PRC) AS COL3 -- 차감된 값 (마지막 레코드 마이너스 안되게)
, T.PRC -
CASE WHEN ROWNUM = COUNT(*) OVER ()
THEN DECODE(SIGN(8 - SUM(T.PRV_PRC) OVER (ORDER BY ROWNUM)), -1, 0, 8 - SUM(T.PRV_PRC) OVER (ORDER BY ROWNUM))
ELSE LEAST(8 - SUM(T.PRV_PRC) OVER (ORDER BY ROWNUM), T.PRC)
END AS COL4 -- 차감된 값 (마이너스 값 있게)
FROM ( SELECT LEVEL AS PRC
, LAG(LEVEL, 1, 0) OVER (ORDER BY ROWNUM) AS PRV_PRC -- 이전금액
FROM DUAL
CONNECT BY LEVEL < 5) T;
안쪽 쿼리 중간집합
결과 집합