그룹 조회 질문 좀요~ 0 5 1,902

by DevPain [2013.02.20 17:59:01]


연말정산 관련해서 전산매체 신고 자료 생성 중 도저히 생각이 나질 않아 질문 드려요 ㅠ

* 설명 : 주석 설명 중 지급처 사업자등록번호에 * 포함되어 있을 경우인 번호들은 공백 포함 안되있을 경우는 그대로 두고
    지급금액이 합산되도록 sum 하여 생성되도록 합니다.

* 질문 내용

1. --11-18   지급금액 부분에 SUM(gigub_amt) 을 하였는데 이 같은 경우는 한 컬럼에 조회되도록 짜여져 있는데 
이럴 경우 그룹절 사용해야 하는 부분에서 어떻게 묶어야 하나요 ㅠ


소스를 통째로 올려보겠습니다.

SELECT 'A'||    --1 -1. 레코드구분
   '26'||   --2 -2. 자료구분
   '129'||    --3 -3. 세무서코드
   LPAD(TO_CHAR(ROWNUM),6,'0')||    --6 -4. 일련번호
   '12345678'|| --8 -5. 제출일자
--제출자(대리인)
   RPAD(SUBSTR('129810000',1,10),10,' ')|| --10-6. 사업자번호(자료제출자의 사업자등록번호)    
  RPAD('aaaaa', 20,' ')|| --20-7. 홈택스ID
   '9000'||     --4 -8. 세무프로그램코드 : 기타프로그램 코드 '9000'
--원천징수의무자
   RPAD(SUBSTR('00001298100000',1,10),10,' ')|| --10-9. 원천징수의무자의 사업자등록번호
   RPAD('회사',40,' ') ||   --40-10.업체명
--소득자(연말정산 신청자)
RPAD(b.juminid, 13,' ')||    --13-11.소득자의 주민번호 수록
   gubun1||     --1 -12.내국인 :1, 외국인:2
   RPAD(b.name,30,' ')||    --30-13.소득자의 성명 기재 
--의료비 지급내역
DECODE(INSTR(busi_no,'*'), '0',RPAD(SUBSTR(REPLACE(busi_no,'-',''),1,10),10,' ')
, LPAD(' ',10))|| --10-14.지급처의 사업자등록번호 수록
   DECODE(INSTR(busi_no,'*'), '0',RPAD(SUBSTR(sangho,1,40),40,' ')
, LPAD(' ',40))|| 
    --40-15.지급처의 상호 수록 
   DECODE(INSTR(busi_no,'*'), '0', '5','1')||   --1 -16.의료증빙코드    
   DECODE(INSTR(busi_no,'*'), '0', LPAD(TO_CHAR(NVL(gigub_cnt,0)),5,'0')
, LPAD('0',5,'0'))||   --5 -17.건수
   DECODE(INSTR(busi_no,'*'), '0', LPAD(TO_CHAR(NVL(gigub_amt,0)),11,'0')
  , LPAD(TO_CHAR(NVL(SUM(gigub_amt),0)),11,'0'))||     --11-18.지급금액
   RPAD(NVL(a.juminid, ' '),13,' ')||   --13-19.의료비지급 대상자의 주민등록 기재
   NVL(gubun1, '1')||   --1 -20.내국인 :1, 외국인:2
   NVL(gubun2, '2')||   --1 -21.본인등 해당 여부
  '1'||   --1 -22.제출대상기간코드
   RPAD(' ',19,' ')  data   --19-23.공란
  FROM  insa_year_med_det a, insa_yearjung b
  WHERE a.year = '2012'
    AND b.year = '2012'
    AND b.sabun = a.sabun
AND DECODE(b.area, 'B', DECODE(SUBSTR(b.dept_code, 1, 1), 'T','B','A'), b.area) = 'X'

소스가 깔끔하게 등록이 안대네요;ㅠ


by 마농 [2013.02.21 10:33:02]
SELECT 'A'                                    -- 1- 1.레코드구분
    || '26'                                   -- 2- 2.자료구분
    || '129'                                  -- 3- 3.세무서코드
    || LPAD(ROWNUM)         , 6,'0')          -- 6- 4.일련번호
    || '12345678'                             -- 8- 5.제출일자
    -- 제출자(대리인) --
    || RPAD('129810000'     ,10,' ')          --10- 6.사업자번호(자료제출자의 사업자등록번호)
    || RPAD('aaaaa'         ,20,' ')          --20- 7.홈택스ID
    || '9000'                                 -- 4- 8.세무프로그램코드 : 기타프로그램 코드 '9000'
    -- 원천징수의무자 --
    || RPAD('00001298100000',10,' ')          --10- 9.원천징수의무자의 사업자등록번호
    || RPAD('회사'          ,40,' ')          --40-10.업체명
    -- 소득자(연말정산 신청자) --
    || RPAD(b.juminid       ,13,' ')          --13-11.소득자의 주민번호 수록
    || RPAD(gubun1          , 1,' ')          -- 1-12.내국인 :1, 외국인:2
    || RPAD(b.name          ,30,' ')          --30-13.소득자의 성명 기재
    -- 의료비 지급내역 --
    || RPAD(NVL(busi_no,' '),10,' ')          --10-14.지급처의 사업자등록번호 수록
    || RPAD(NVL(sangho ,' '),40,' ')          --40-15.지급처의 상호 수록
    || NVL2(busi_no,'5','1')                  -- 1-16.의료증빙코드
    || LPAD(NVL2(busi_no,gigub_cnt,0),5,'0')) -- 5-17.건수
    || LPAD(NVL(gigub_amt,0)  ,11,'0')        --11-18.지급금액
    || RPAD(NVL(a.juminid,' '),13,' ')        --13-19.의료비지급 대상자의 주민등록 기재
    || NVL(gubun1, '1')                       -- 1-20.내국인 :1, 외국인:2
    || NVL(gubun2, '2')                       -- 1-21.본인등 해당 여부
    || '1'                                    -- 1-22.제출대상기간코드
    || RPAD(' ',19,' ')                       --19-23.공란
  FROM (SELECT juminid, gubun1, gubun2
             , DECODE(INSTR(busi_no, '*'), 0, '', REPLACE(busi_no, '-')) busi_no
             , DECODE(INSTR(busi_no, '*'), 0, '', sangho) sangho
             , SUM(gigub_cnt) gigub_cnt
             , SUM(gigub_amt) gigub_amt
          FROM insa_year_med_det a
         WHERE year = '2012'
         GROUP BY juminid, gubun1, gubun2
             , DECODE(INSTR(busi_no, '*'), 0, '', REPLACE(busi_no, '-'))
             , DECODE(INSTR(busi_no, '*'), 0, '', sangho)
        ) a
     , insa_yearjung b
 WHERE b.year = '2012'
   AND b.sabun = a.sabun
   AND DECODE(b.area, 'B', DECODE(SUBSTR(b.dept_code, 1, 1), 'T','B','A'), b.area) = 'X'
;

by DevPain [2013.02.21 16:27:52]

마농님 답변 감사드립니다~~
그런데 오라클 버전이 7이라서 nvl2 함수가 안먹혀서요 ㅠ

by 마농 [2013.02.21 16:45:00]

NVL2(busi_no,'5','1')
DECODE(busi_no,'','1','5')


by DevPain [2013.02.21 17:03:34]

LPAD(NVL2(busi_no,gigub_cnt,0),5,'0'))
이부분은

LPAD(decode(busi_no,'',0,gigub_cnt),5,'0'))

이렇게 변형해주면 맞는거죠~?!


by 마농 [2013.02.21 17:25:29]

괄호의 갯수가 안맞네요.
마지막 괄호 빼세요.

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