자료가 추가될 때 마다 union을 이용해서 추가하는데 동적으로 바꿀수 없나요? 0 12 4,243

by 윤경호 [SQL Query] 동적 union [2013.07.15 16:07:43]


제목 없음.png (10,257Bytes)


안녕하세요 ORACLE에대해 잘 알지 못 하는 신입입니다. 부족하지만 많은 것을 알려주시면 감사하겠습니다.

회사에서 급여프로그렘을 하게되었는데요
공제항목들을 사용자가 동적으로  추가하고 삭제를 할 수 있어야합니다.
동적으로 추가할 때  퍼센트(요율)와 공제항목을 추가하면  기본급에서 퍼센트를 곱해서 지급금액이 나오게 하는 쿼리입니다.
제가 초보여서 UNION을 이용하여 공제항목이 늘어날 때마다 추가를 시켰는데 비효율 적인것 같다는 생각에
동적쿼리를 검색해봤습니다. 그런데 어떻게 사용해야 하는건지 모르겠습니다. 선배님들께서 번거로우시겠지만 천천히 알려주시면 감사하겠습니다.

급여항목코드|급여항목코드명|공제구분|과세구분코드
----001----| ---기본급----|-- 01--|--001(과세)--
-------------|---------------- |--------|--002(비과세)--   
.
----005----|---국민연금--|---02--|---003(공제)
.
.
.
기본급의 지급금액을 가져와서 국민연금의 요율을 곱하여 계산된 값을 보여줍니다.




TBMG_급여관리--기본급 ,  급여항목코드 ,  사원번호
TBMG_급여코드--급여항목코드 ,  요율
TBMG_직원정보--사원번호

ex)기본급 * 요율 = 지급금액

UNION없이 동적쿼리가 가능하나요?
또 PIVOT을 해야되는데 이것도 동적으로 가능할까요?


<select id="TBMG_급여관리_년월급여_S"
  parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
   SELECT  SUM(DECODE(T1.급여항목코드, '001',T3.지급금액)) AS 기본급  
 
  ,SUM(DECODE(T1.급여항목코드, '005',T3.지급금액 * T1.요율))  AS 국민연금
  ,SUM(DECODE(T1.급여항목코드, '006',T3.지급금액 * T1.요율))  AS 건강보험
  ,SUM(DECODE(T1.급여항목코드, '007',T3.지급금액 * T1.요율))  AS 고용보험
  ,SUM(DECODE(T1.급여항목코드, '008',T3.지급금액 * T1.요율))  AS 소득세
  ,SUM(DECODE(T1.급여항목코드, '009',T3.지급금액 * T1.요율))  AS 주민세
  ,SUM(DECODE(T1.급여항목코드, '010',T3.지급금액 * T1.요율))  AS 농특세
  ,SUM(DECODE(T1.급여항목코드, '011',T3.지급금액 * T1.요율))  AS 장기요양보험료
  
  FROM (SELECT 기관코드
    ,급여항목코드
    ,과세구분코드
    ,급여공제구분
    ,요율
   FROM TBMG_급여코드
   WHERE 기관코드 = #기관코드#  
  ) T1
 
INNER JOIN
   (SELECT 사원번호
   ,팀코드
   ,기관코드
FROM TBMG_직원정보
WHERE 기관코드 = #기관코드#
AND 퇴직일 IS NULL

) T2
    ON T1.기관코드 = T2.기관코드
  
JOIN  
    (SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
  
   
   UNION
SELECT '005' AS 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '001'
    UNION
SELECT '006' AS 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '001' 

) T3
  ON T1.급여항목코드 = T3.급여항목코드
  AND T2.사원번호 = T3.사원번호
  AND T3.귀속년월 = #귀속년월#

GROUP BY T2.팀코드, T2.사원번호
ORDER BY T2.팀코드
 
 </select> 
 

by 우리집아찌 [2013.07.15 16:34:10]
WITH TBMG_급여관리(기본급 , 급여항목코드 , 사원번호) AS (--기본급 , 급여항목코드 , 사원번호
   SELECT '100','001','A' FROM DUAL UNION ALL
   SELECT '100','002','A' FROM DUAL UNION ALL
   SELECT '100','003','A' FROM DUAL UNION ALL
   SELECT '200','001','B' FROM DUAL UNION ALL
   SELECT '200','002','B' FROM DUAL UNION ALL
   SELECT '200','003','B' FROM DUAL 
), TBMG_급여코드(급여항목코드 , 요율) AS ( --급여항목코드 , 요율
   SELECT '001',0.6 FROM DUAL UNION ALL
   SELECT '002',0.4 FROM DUAL UNION ALL
   SELECT '003',0.1 FROM DUAL 

),BMG_직원정보(사원번호,사원명) AS ( --사원번호
   SELECT 'A','홍길동' FROM DUAL UNION ALL
   SELECT 'B','아무개' FROM DUAL 
)   
 

SELECT 
  MAX(a.사원명) "사원명"
 ,SUM(b.기본급 * DECODE(c.급여항목코드,'003',c.요율*-1,c.요율) ) "기본급" -- 세금은 마이너스인지 DECODE로 연산 
 ,SUM(DECODE(c.급여항목코드, '001',b.기본급 * c.요율)) AS 기본급
 ,SUM(DECODE(c.급여항목코드, '002',b.기본급 * c.요율)) AS 수당
 ,SUM(DECODE(c.급여항목코드, '003',b.기본급 * c.요율)) AS 세금 

FROM 
    BMG_직원정보 a , TBMG_급여관리 b , TBMG_급여코드 c
WHERE a.사원번호   = b.사원번호
 AND b.급여항목코드 = c.급여항목코드
GROUP BY a.사원번호
ORDER BY a.사원번호

by 윤경호 [2013.07.15 17:11:05]
답변 해 주셔서 감사합니다.
제가 아직 많은것을 모르고 있어서요... 이해가 가질 않습니다.
ㅠㅠ
 지급금액, 요율등 동적으로 기입하는 건데요..
제가 생략한 쿼리가 있는데 다시한번더 봐주시면 안될까요?

<select id="TBMG_급여관리_년월급여_S"
  parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
   SELECT  SFHR_팀명(T2.팀코드, #JDCSESSION_회계단위코드#)   AS 부서명
  ,SFMG_성명(T2.사원번호, #JDCSESSION_기관코드# ) AS 성명
  ,SUM(DECODE(T1.급여항목코드, '001',T3.지급금액)) AS 기본급 
  ,SUM(DECODE(T1.급여항목코드, '002',T3.지급금액)) AS 상여
  ,SUM(DECODE(T1.급여항목코드, '012',T3.지급금액)) AS 특별상여
  ,SUM(DECODE(T1.급여항목코드, '013',T3.지급금액)) AS 직책수당
  ,SUM(DECODE(T1.급여항목코드, '014',T3.지급금액)) AS 차량유지비
  ,SUM(DECODE(T1.급여항목코드, '015',T3.지급금액)) AS 휴일근로수당
  ,SUM(DECODE(T1.급여항목코드, '016',T3.지급금액)) AS 생리수당
  ,SUM(DECODE(T1.급여항목코드, '017',T3.지급금액)) AS 연월차수당
  ,SUM(DECODE(T1.급여항목코드, '018',T3.지급금액)) AS 자격증수당
  ,SUM(DECODE(T1.급여항목코드, '019',T3.지급금액)) AS 프로젝트성과급
  ,SUM(DECODE(T1.급여항목코드, '020',T3.지급금액)) AS 급여인상분
  ,SUM(DECODE(T1.급여항목코드, '021',T3.지급금액)) AS 특별성과급
  ,SUM(DECODE(T1.급여항목코드, '022',T3.지급금액)) AS 연차수당
 
  ,SUM(DECODE(T1.과세구분코드, '001',T3.지급금액)) AS 과세합계
 
  ,SUM(DECODE(T1.급여항목코드, '003',T3.지급금액)) AS 식대
  ,SUM(DECODE(T1.급여항목코드, '004',T3.지급금액)) AS 자가운전
  ,SUM(DECODE(T1.급여항목코드, '023',T3.지급금액)) AS 야간근로수당
  ,SUM(DECODE(T1.급여항목코드, '024',T3.지급금액)) AS 식대보조비
  ,SUM(DECODE(T1.급여항목코드, '025',T3.지급금액)) AS 연말정산
  ,SUM(DECODE(T1.급여항목코드, '026',T3.지급금액)) AS 연구지원비
  ,SUM(DECODE(T1.급여항목코드, '027',T3.지급금액)) AS 육아보육지원비
  ,SUM(DECODE(T1.급여항목코드, '028',T3.지급금액)) AS 연구성과급
  ,SUM(DECODE(T1.급여항목코드, '029',T3.지급금액)) AS 보험환급
 
  ,SUM(DECODE(T1.과세구분코드, '002',T3.지급금액)) AS 비과세합계
 
  ,SUM(DECODE(T1.급여항목코드, '005',T3.지급금액 * T1.요율))  AS 국민연금
  ,SUM(DECODE(T1.급여항목코드, '006',T3.지급금액 * T1.요율))  AS 건강보험
  ,SUM(DECODE(T1.급여항목코드, '007',T3.지급금액 * T1.요율))  AS 고용보험
  ,SUM(DECODE(T1.급여항목코드, '008',T3.지급금액 * T1.요율))  AS 소득세
  ,SUM(DECODE(T1.급여항목코드, '009',T3.지급금액 * T1.요율))  AS 주민세
  ,SUM(DECODE(T1.급여항목코드, '010',T3.지급금액 * T1.요율))  AS 농특세
  ,SUM(DECODE(T1.급여항목코드, '011',T3.지급금액 * T1.요율))  AS 장기요양보험료
 
  ,SUM(DECODE(T1.급여공제구분, '02',T3.지급금액 * T1.요율))  AS 공제합계
  ,(SUM(DECODE(T1.급여공제구분, '01',T3.지급금액)) - SUM(DECODE(T1.급여공제구분, '02', T3.지급금액 * T1.요율)))  AS 영수액
    FROM (SELECT 기관코드
    ,급여항목코드
    ,과세구분코드
    ,급여공제구분
    ,요율
   FROM TBMG_급여코드
   WHERE 기관코드 = #기관코드#  
  ) T1
 
INNER JOIN
   (SELECT 사원번호
   ,팀코드
   ,기관코드
FROM TBMG_직원정보
WHERE 기관코드 = #기관코드#
AND 퇴직일 IS NULL

) T2
    ON T1.기관코드 = T2.기관코드
  
JOIN  
    (SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
    AND 급여항목코드 = '002'
   
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '003' 
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '004'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '012'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '013'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '014'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '015'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '016'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '017'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '018'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '019'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '020'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '021'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '022'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '023'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '024'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '025'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '026'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '027'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '028'
UNION
SELECT 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '029'
  
   UNION
SELECT '005' AS 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '001'
    UNION
SELECT '006' AS 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '001'
   UNION
SELECT '007' AS 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '001'
UNION
SELECT '008' AS 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '001'
UNION
SELECT '009' AS 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '001'
UNION
SELECT '010' AS 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '001'
UNION
SELECT '011' AS 급여항목코드
   ,지급금액
   ,사원번호
   ,귀속년월
   ,기관코드
   FROM TBMG_급여관리
   WHERE 귀속년월 = #귀속년월#
   AND 기관코드 = #기관코드#
   AND 급여항목코드 = '001'
 

) T3
  ON T1.급여항목코드 = T3.급여항목코드
  AND T2.사원번호 = T3.사원번호
  AND T3.귀속년월 = #귀속년월#

GROUP BY T2.팀코드, T2.사원번호
ORDER BY T2.팀코드
 
 </select> 
 

by 우리집아찌 [2013.07.15 16:55:49]
추가공제항목이 추가컬럼으로 생성되려면 다이나믹 쿼리 사용하셔야합니다.

아니면 구분자로두고 데이터를 한컬럼에 받아서 처리하셔야 하구요.

http://oracleclub.com/article/55512 참고하세요

by 마농 [2013.07.15 16:58:15]
-- Row 는 데이터 량에 따라 가변적으로 늘어나지만
-- Column 은 고정입니다. 가변적으로 늘리려면 동적으로 구현해야 합니다.
-- 조인관계만 명확하게 정의 한다면 테이블을 여러번 읽을 필요는 없습니다.
-- 5,6,7번항목이 1번 항목에 요율을 곱하는 걸로 해서 작성했습니다.
-- 더 다양한 case 가 있다면 조인절의 Case 절을 손보셔야 할듯.
SELECT a.팀코드, a.사원번호
     , SUM(DECODE(c.급여항목코드, '001', b.지급금액)) AS 기본급
     , SUM(DECODE(c.급여항목코드, '002', b.지급금액)) AS 상여
     , SUM(DECODE(c.급여항목코드, '003', b.지급금액)) AS 식대
     , SUM(DECODE(c.급여항목코드, '004', b.지급금액)) AS 자가운전
     , SUM(DECODE(c.급여항목코드, '005', b.지급금액 * c.요율)) AS 국민연금
     , SUM(DECODE(c.급여항목코드, '006', b.지급금액 * c.요율)) AS 건강보험
     , SUM(DECODE(c.급여항목코드, '007', b.지급금액 * c.요율)) AS 고용보험
  FROM TBMG_직원정보 a
     , TBMG_급여관리 b
     , TBMG_급여코드 c
 WHERE b.귀속년월 = #귀속년월#
   AND a.기관코드 = #기관코드#
   AND b.기관코드 = #기관코드#
   AND c.기관코드 = #기관코드#
   AND a.사원번호 = b.사원번호
   AND b.급여항목코드 = CASE WHEN c.급여항목코드 IN ('005','006','007') THEN '001'
                           ELSE c.급여항목코드 END
 GROUP BY a.팀코드, a.사원번호
 ORDER BY a.팀코드, a.사원번호
;

by 윤경호 [2013.07.15 17:22:00]
안녕하세요
좋은 답변 감사드립니다.
그렇다면 컬럼은 제가 수동적으로 SUM(DECODE 를 이용하여 추가 시켜야하는건가요?
제가 초보여서 동적으로 추가하는 예제가 없을 까요? 구글링을 해봐도 없어서요.
그리고 답변해주신것 처럼하면 UNION은 필요없어지는것 대신 조인절의 CASE절에 005,006,007, 008....
코드를 추가시켜야 되는건가요?

by 우리집아찌 [2013.07.15 17:34:53]
전 ref_cursor 이용해서 동적쿼리 사용합니다만

오라클 접한지 얼마 안되셨으면 쉽지 않을듯합니다.

그때그때 컬럼 추가 하시는게 나을듯합니다

혹시 하시려면 밑에것 참고하시거나 "동적쿼리" 라고 구글링 해보세요

http://oracleclub.com/lecture/1843
 

by 마농 [2013.07.16 09:39:01]
공제항목이 무조건 기본급 * 요율 식으로만 계산된다면?
AND b.급여항목코드 = DECODE(c.급여공제구분, '02', '001', c.급여항목코드)

by 윤경호 [2013.07.16 18:03:38]

안녕하세요
sum(decode를 이용해서 PIVOT을 했는데요
PIVOT없이  c.급여항목코드 전체와 급여공제가 '02'인 급여항목에 요율을 곱하여 계산된 지급금액이 나올려면 어떻게 해야 하나요?
시도를 해봤는데 급여항목코드 전체가 나오지 않아서 답답합니다.
도움주시면 감사하겠습니다.

SELECT  a.사원번호
  , c.급여항목코드명 
  , c.급여항목코드
  , case when b.급여항목코드 = '001'  then b.지급금액 * c.요율
    else b.지급금액
    end
  , c.요율
  FROM TBMG_직원정보 a
, TBMG_급여관리 b
, TBMG_급여코드 c
 WHERE b.귀속년월 = '201307'
   AND a.기관코드 = '4028220135'
   AND b.기관코드 = '4028220135'
   AND c.기관코드 = '4028220135'
   AND a.사원번호 = b.사원번호
   AND b.급여항목코드 = decode(c.급여공제구분, '02','001' , c.급여항목코드)
 
 GROUP BY a.팀코드, a.사원번호, c.급여항목코드명, c.급여항목코드,b.급여공제구분, b.지급금액, c.요율, b.급여항목코드
 ORDER BY a.팀코드, a.사원번호, c.급여항목코드


by 마농 [2013.07.16 18:33:59]
 WHERE a.기관코드 = '4028220135'
   AND c.기관코드 = '4028220135'
   AND b.기관코드(+) = '4028220135'
   AND b.사원번호(+) = a.사원번호
   AND b.귀속년월(+) = '201307'
   AND b.급여항목코드(+) = DECODE(c.급여공제구분, '02', '001', c.급여항목코드)

by 마농 [2013.07.17 08:25:29]
-- 위와 같이 아우터 조인을 두개 테이블과 할 수는 없겠네요...
-- 아래와 같이 ANSI 조인을 써야 하겠네요.
SELECT *
  FROM TBMG_급여코드 c
 INNER JOIN TBMG_직원정보 a
    ON a.기관코드 = c.기관코드
  LEFT OUTER JOIN TBMG_급여관리 b
    ON c.기관코드 = b.기관코드
   AND a.사원번호 = b.사원번호
   AND b.급여항목코드 = DECODE(c.급여공제구분, '02', '001', c.급여항목코드)
   AND b.귀속년월 = '201307'
 WHERE c.기관코드 = '4028220135'
;

by 윤경호 [2013.07.19 11:42:49]

잘 해결했습니다 .감사합니다


by 윤경호 [2013.07.15 18:58:52]

큰 도움이 됐습니다. 감사합니다.

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