WITH t AS ( SELECT 1000000 a -- 대출원금 , 0.03 r -- 연이율 , 36 n -- 상환개월 FROM dual ) , t1(a, r, n, m, x0, x1, x2, x3, x4, y0, y1, y2, y3, y4) AS ( SELECT a, r, n , 1 m , a x0 , ROUND(a / n) x1 , ROUND(a * r/12) x2 , ROUND(a / n) + ROUND(a * r/12) x3 , a - ROUND(a / n) x4 , a y0 , ROUND( (a * r/12 * POWER(1 + r/12, n)) / (POWER(1 + r/12, n) - 1) ) - ROUND(a * r/12) y1 , ROUND(a * r/12) y2 , ROUND( (a * r/12 * POWER(1 + r/12, n)) / (POWER(1 + r/12, n) - 1) ) y3 , a - ROUND( (a * r/12 * POWER(1 + r/12, n)) / (POWER(1 + r/12, n) - 1) ) + ROUND(a * r/12) y4 FROM t UNION ALL SELECT a, r, n , m + 1 m , x4 x0 , LEAST(x4, x1) x1 , ROUND(x4 * r/12) x2 , LEAST(x4, x1) + ROUND(x4 * r/12) x3 , x4 - LEAST(x4, x1) x4 , y4 y0 , y3 - ROUND(y4 * r/12) y1 , ROUND(y4 * r/12) y2 , y3 , y4 - y3 + ROUND(y4 * r/12) y4 FROM t1 WHERE m + 1 <= n ) SELECT a 대출원금 , r 연이율 , n 상환기간 , m 회차 , x0 원금균등상환_원금 , SUM(x1) 원금균등상환_상환 , SUM(x2) 원금균등상환_이자 , SUM(x3) 원금균등상환_합계 , x4 원금균등상환_잔액 , y0 원리금균등상환_원금 , SUM(y1) 원리금균등상환_상환 , SUM(y2) 원리금균등상환_이자 , SUM(y3) 원리금균등상환_합계 , y4 원리금균등상환_잔액 FROM t1 GROUP BY ROLLUP((a, r, n, m, x0, x4, y0, y4)) ;
공식을 적용하여 만들어 보긴 했는데..
원리금균등상환 합계에 오차가 발생하네요.
반올림 적용하다 보니 그런 듯 한데 보정이 조금 필요하겠네요.