안녕하세요 항상 고수님들의 조언 감사하게 생각하고있습니다.
현재 작업중인 내용은 ...
1. A테이블 : 수당을 지급받을 대상자들의 집합
2. B테이블 : 수당이 지급된 사람들의 집합
3. 가지고올 결과 : 2015년 6월기준 A테이블에 '홍길동', '이순신' 이 대상자이고 이중 '이순신'은 수당을 지급받음
'유관순'은 대상자가 아니지만 수당을 받게됨
ㅇ A테이블 : 사번, 성명 등 인사정보
ㅇ B테이블 : 지급기준년월, 사번,금액
지급기준년월 | 사번 | 성명 | 금액 | 대상자여부 |
201506 | 12345 | 홍길동 | 0 | Y |
201506 | 67890 | 이순신 | 100000 | Y |
201506 | 99999 | 유관순 | 150000 | N |
SELECT B.지급기준년월 , A.사번 , A.성명 , NVL (B.금액, 0) AS 금액 FROM (SELECT A.EMP_NO , A.EMP_NM FROM 사원정보 A , 부서 B , 수당대상자 C WHERE '201506' BETWEEN SUBSTR (A.입사일, 1, 6) AND SUBSTR (NVL (A.퇴사일, '99991231'), 1, 6) AND B.회사코드 = A.회사코드 AND B.부서코드 = A.부서코드 AND A.회사코드 = C.회사코드 AND A.사번 = C.사번 AND C.수당대상자여부 = '1' AND '201506'|| TO_CHAR (LAST_DAY (TO_DATE ('201506', 'YYYYMM')), 'DD') BETWEEN B.부서생성일 AND NVL (B.부서종료일, '99991231') AND NOT EXISTS (SELECT '1' FROM 사원정보 WHERE 회사코드 = A.회사코드 AND 사번= A.사번 AND '201506' BETWEEN SUBSTR (휴직시작일, 1, 6) AND SUBSTR (휴직종료일, 1, 6) ) ) A , (SELECT 회사코드 , 사번 , 지급기준년월 , 금액 FROM 수당지급내역 WHERE 회사코드 = '테스트회사' AND 지급기준년월 = '201506' AND 수당종류 = '수당A' ) B WHERE A.회사코드 = B.회사코드(+) AND A.사번 = B.사번(+)
이런식으로 구상을 해서 테스트해보니 생각한것처럼 결과가 나오긴했습니다. 그런데 대상자가 아닌 직원을 개별적으로 저장하게 해달라는 요청사항이 생겨서 문제입니다.
대상자가 아닌 '유관순'이 수당지급내역 테이블에만 INSERT되어있어 제가 짠 쿼리상으론 조회되지 않습니다...
아무래도 구조적으로 다시 잡아야 할듯합니다.
대상자이면서 수당이 지급된 직원 + 대상자가 아니지만 수당이 지급된 직원의 결과를 가져오는 방법은 어떤식으로 해야할지 조언을 좀 부탁드립니다.
-- full outer 조인을 이용하면 될듯 합니다.~ select B.지급기준년월 , NVL(A.사번,B.사번) , NVL (B.금액, 0) AS 금액 , DECODE(A.사번,null,'N','Y') 대상자여부 FROM (SELECT A.EMP_NO , A.EMP_NM FROM 사원정보 A , 부서 B , 수당대상자 C WHERE '201506' BETWEEN SUBSTR (A.입사일, 1, 6) AND SUBSTR (NVL (A.퇴사일, '99991231'), 1, 6) AND B.회사코드 = A.회사코드 AND B.부서코드 = A.부서코드 AND A.회사코드 = C.회사코드 AND A.사번 = C.사번 AND C.수당대상자여부 = '1' AND '201506'|| TO_CHAR (LAST_DAY (TO_DATE ('201506', 'YYYYMM')), 'DD') BETWEEN B.부서생성일 AND NVL (B.부서종료일, '99991231') AND NOT EXISTS (SELECT '1' FROM 사원정보 WHERE 회사코드 = A.회사코드 AND 사번= A.사번 AND '201506' BETWEEN SUBSTR (휴직시작일, 1, 6) AND SUBSTR (휴직종료일, 1, 6) ) ) A full outer join (SELECT 회사코드 , 사번 , 지급기준년월 , 금액 FROM 수당지급내역 WHERE 회사코드 = '테스트회사' AND 지급기준년월 = '201506' AND 수당종류 = '수당A' ) B on A.회사코드 = B.회사코드 AND A.사번 = B.사번