1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | 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)) ; |
공식을 적용하여 만들어 보긴 했는데..
원리금균등상환 합계에 오차가 발생하네요.
반올림 적용하다 보니 그런 듯 한데 보정이 조금 필요하겠네요.