쿼리 질문(훔...) 0 7 889

by 보노보노 [SQL Query] [2018.01.10 15:07:36]


쿼리를 짜다가 생각보다 안풀리는 문제가 있어 질문 올립니다.

연말정산개발관련... 공제세액을 넣어주는데... 첫째는 30만원 둘째는 50만원 셋째 이후는 70만원을 줍니다.

가지고 있는 정보는 자녀수 정보와, 출산입양자녀(당해년도 출산)수는 있구요...

쉬울거 같았는데 먼가 애매하네요.... 훔... 머리가 안돌아요..

출산입양자녀수가 2이상?인경우?

SELECT A.*
FROM (
SELECT  2 AS CHLR_CNT -- 자녀수
       ,2 AS CBIR_ADP_CHLR_CNT -- 출산입양자녀수
FROM DUAL
         )

 

 

 

by 마농 [2018.01.10 15:33:56]

당해년도 출산입양 자녀가 첫째인지? 둘째인지 정보가 없네요?
각 자녀별로 몇째 자녀인지 정보가 있어야 합니다.
물론 전체 자녀수가 2명이고 당해 출산이 2명이니 첫째와 둘째라고 유추할 수도 있지만
20세 이상 자녀가 더 있어서 기본공제 대상에 포함이 안된 경우도 생각할 수 있습니다.
이 경우엔 둘째, 셋째가 되겠지요.
따라서 위 정보만으로는 알 수 없습니다.


by 보노보노 [2018.01.10 15:41:37]
WITH CBIR_ADP_CHLR_AMT_CODEBOOK AS (
 SELECT ROWNUM AS HLR_NO
                ,DECODE(ROWNUM, 1, 300000 -- 첫째 30만원
                              , 2, 500000 -- 둘째 50만원
                              , 3, 700000 -- 셋째 70만원
                              ,    700000 -- 셋째이상 70만원 
                ) AS CHLR_NO_AMT
 FROM DUAL
 CONNECT BY LEVEL <= 100 -- 100명까지...
)
SELECT  A.*
               ,(
                  SELECT SUM(CHLR_NO_AMT)
                   FROM  CBIR_ADP_CHLR_AMT_CODEBOOK Z
                   WHERE CHLR_NO BETWEEN A.CHAR_CNT - A.CBIR_ADP_CHLR_CNT + 1 AND A.CHLR_CNT
                ) AS CBIR_ADP_CHLR_TAX_DUTN_AMT
FROM     (
                  SELECT  2 AS CHLR_CNT /* 자녀수_세액공제 */
                         ,2 AS CBIR_ADP_CHLR_CNT /* 출산입양자녀수 */
                  FROM     DUAL
                ) A

일단은... 이렇게 해봤어요... 엑셀에서 맞춰보니 맞는듯 헌디...


by 보노보노 [2018.01.10 15:43:30]

20세 이상 자녀가 값에 있는지를 체크하는게 맞겠네요. 조언 감사합니다.

훔.. 등록을 안했을수도???? 아.. 고민되네...


by 마농 [2018.01.10 15:48:02]

20세 이상 등록 안했을 가능성이 높죠.
또는 20세 미만이라도 소득이 있는 자녀가 간혹 있을 수도 있죠.
아예 출산자녀수 입력 받을 때 몇째 부터인지를 입력받으셔야 할 듯 합니다.


by 보노보노 [2018.01.10 15:55:36]

맞네요... 연락해보니까.. 아옹... 화면에 입력 뽑아야 하네.. ㅜㅜ

감사합니다. ㅎ


by 마농 [2018.01.10 16:00:45]
WITH t AS
(
SELECT 2 chlr_cnt          -- 자녀수
     , 2 chlr_cnt_6        -- 6세이하자녀수
     , 2 cbir_adp_chlr_cnt -- 출산입양자녀수
     , 1 cbir_adp_chlr_seq -- 출산입양자녀-순서
  FROM dual
UNION ALL SELECT 3, 2, 1, 3 FROM dual
UNION ALL SELECT 4, 4, 3, 2 FROM dual
)
SELECT chlr_cnt
     , chlr_cnt_6
     , cbir_adp_chlr_cnt
     , cbir_adp_chlr_seq
     , chlr_cnt * 15 + GREATEST(chlr_cnt - 2, 0) * 15 v1 -- 자녀-세액공제
     , GREATEST(chlr_cnt_6 - 1, 0) * 15               v2 -- 6세이하자녀-세액공제
     , cbir_adp_chlr_cnt * 70
     - CASE WHEN cbir_adp_chlr_seq = 1 THEN 40 ELSE 0 END -- 첫째(70-40=30)
     - CASE WHEN cbir_adp_chlr_seq = 2 THEN 20
            WHEN cbir_adp_chlr_seq = 1 AND cbir_adp_chlr_cnt > 1 THEN 20
            ELSE 0 END -- 둘째(70-20=50)
       AS v3 -- 출산입양자녀-세액공제
  FROM t
;

 


by 보노보노 [2018.01.10 16:15:05]

오홍 이런방법도 있겠구나~ ^^ 감사합니다.

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