대출 거치기간 후 원리금균등 상환 관련 SQL 도와주세요 1 2 214

by 구사일생 [SQL Query] [2020.10.12 21:12:14]


대출상환 관련 SQL을 작성 중 입니다.

고수님들께서 도와 주세요

거치기간을 반영한 원리금 균등상환을 하는 SQL 을 구현 해야 합니다.

(거치기간이 있는 경우와 없는 경우가 섞여 있음)

꼭 부탁드립니다.

예)

대출금:1,000,000원

이율: 3%

대출기간: 12개월간 

거치기간 : 6개월

회차 상환원금 상환이자 입금합계 잔금
1 0 2,500 2,500 1,000,000
2 0 2,500 2,500 1,000,000
3 0 2,500 2,500 1,000,000
4 0 2,500 2,500 1,000,000
5 0 2,500 2,500 1,000,000
6 0 2,500 2,500 1,000,000
7 165,628 2,500 168,128 834,372
8 166,042 2,086 168,128 668,330
9 166,457 1,671 168,128 501,873
10 166,873 1,255 168,128 334,999
11 167,291 837 168,128 167,709
12 167,709 419 168,128 0
by 마농 [2020.10.13 16:42:28]
WITH t AS
(
SELECT a, b, c, d, e
     , FLOOR(a*e*POWER(e+1, c-d) / (POWER(e+1, c-d) - 1)) f    -- 원리금(균등상환액)
  FROM (SELECT a, b, c, d
             , b/100/12 e    -- 이율(월)
          FROM (SELECT 1000000 a -- 대출금(원)
                     ,  3 b      -- 이율(%/연)
                     , 12 c      -- 대출기간(월)
                     ,  6 d      -- 거치기간(월)
                  FROM dual)
        )
)
, t1 (a, b, c, d, e, f, g, h, i, j, k) AS
(
SELECT a, b, c, d, e, f
     , 0 + 1 g -- 회차
     , CASE WHEN d > 0 THEN 0 ELSE f - FLOOR(a * e) END h -- 상환원금
     , FLOOR(a * e) i -- 상환이자
     , CASE WHEN d > 0 THEN FLOOR(a * e) ELSE f END j -- 입금합계
     , a
     - CASE WHEN d > 0 THEN 0 ELSE f - FLOOR(a * e) END k -- 잔금
  FROM t
 UNION ALL
SELECT a, b, c, d, e, f
     , g + 1 g -- 회차
     , CASE WHEN c = g + 1 THEN k
            WHEN d > g THEN 0 ELSE f - FLOOR(k * e) END h -- 상환원금
     , FLOOR(k * e) i -- 상환이자
     , CASE WHEN d > g THEN FLOOR(k * e) ELSE f END j -- 입금합계
     , k
     - CASE WHEN c = g + 1 THEN k
            WHEN d > g THEN 0 ELSE f - FLOOR(k * e) END k -- 잔금
  FROM t1
 WHERE g < c
)
SELECT * FROM t1
;

 


by 구사일생 [2020.10.13 22:11:42]

헐, 퇴근 후 이제야 봤네요 이렇게도 하는 군요 또, 하나 배워갑니다. 그런데 이해하려면 엄청 시간이 필요 하겠네요

암튼, 엄청 감사합니다. 일주일 넘게 고민 했었는데 좀 허무하면서 감사하네요

잘 활용해서 업무에 참고 할게요  ~~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입