누진세율 질문입니다. 0 3 1,048

by 정규직 [SQL Query] [2014.12.09 23:49:53]


누진세율 질문입니다.


아래와 같은 세율구간이 있습니다.

# TABLE A : 구간별 세율이 들어 있습니다.

-----------------------------------------------------
   시작값     |    종료값      |    세율
-----------------------------------------------------
         1        |    100,000    |      1 %
   100,000   |  1,000,000   |      5 %
 1,000,000  |  5,000,000   |     10 %
-----------------------------------------------------


# 사용값이 2,000,000 일 경우 아래와 예시와 같이 각 구간에 속해 있는 금액을 계산하고 싶습니다.

1. 100,000 * 1 % =  1,000
2. 900,000 * 5 % = 45,000
3. 1,000,000 * 10 % = 100,000

합계 : 146,000

 

많은 부탁 드립니다.

by 비주류 [2014.12.10 01:02:53]
-- 각 구간 시작, 끝이 애매하여 1부터 시작하는 것으로 가정
WITH t AS (
    SELECT       1 s,  100000 e,  1 r FROM DUAL UNION ALL
    SELECT  100001 s, 1000000 e,  5 r FROM DUAL UNION ALL
    SELECT 1000001 s, 5000000 e, 10 r FROM DUAL
)
SELECT  SUM(DECODE(SIGN(e - :u),
            1, DECODE(SIGN(:u - s),
                -1, 0,
                (:u - s + 1) * r / 100),
            (e - s + 1) * r / 100)) sum
FROM    t
--WHERE   s <= :u

by 마농 [2014.12.10 09:01:13]
WITH tax AS
(
-- 저는 시작값 1을 0으로 바꿨습니다.
SELECT 0 s, 100000 e, 1 r FROM dual
UNION ALL SELECT  100000, 1000000,  5 FROM dual
UNION ALL SELECT 1000000, 5000000, 10 FROM dual
)
, amt AS
(
SELECT 1 pk, 2000000 amt FROM dual
UNION ALL SELECT 2, 200000 FROM dual
UNION ALL SELECT 3,  20000 FROM dual
)
SELECT a.pk
     , a.amt
     , SUM((LEAST(a.amt, t.e) - t.s) * t.r) / 100
  FROM amt a
     , tax t
 WHERE a.amt > t.s
 GROUP BY a.pk, a.amt
 ORDER BY a.pk
;

 


by 정규직 [2014.12.10 09:54:22]

답변 감사드립니다.

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