2018년에 입사한 사원 중에 부서가 회계팀인 사원의 최종 사수를 구하려고 합니다.
Employee 테이블
| emp_no | emp_name | dept | ent_year | manager_no |
| 18001 | 김땡땡 | 회계 | 2018 | 17001 |
| 18002 | 이땡땡 | 인사 | 2018 | 17001 |
| 17001 | 박땡땡 | 회계 | 2017 | 15001 |
| 15001 | 최땡땡 | 회계 | 2018 | 02003 |
| 02003 | 한땡땡 | 회계 | 2018 | |
.....
이런식으로 테이블이 있을 때, 다음과 같이 manage_no가 null인 경우까지 찾아서 최종사수를 구하려고합니다.
| emp_no | emp_name | manager_no | manage_no |
| 18001 | 김땡떙 | 02003 | 한땡떙 |
재귀쿼리를 써야하는지, case when 같은 함수를 써야하는지 잘 모르겠습니다.
어떻게 쿼리를 짜야하나요?ㅠㅠ
-- http://www.gurubee.net/lecture/1903 WITH T(emp_no, emp_name, dept, ent_year, manager_no) AS ( SELECT '18001', '김땡땡', '회계', '2018', '17001' FROM dual UNION ALL SELECT '18002', '이땡땡', '인사', '2018', '17001' FROM dual UNION ALL SELECT '17001', '박땡땡', '회계', '2017', '15001' FROM dual UNION ALL SELECT '15001', '최땡땡', '회계', '2018', '02003' FROM dual UNION ALL SELECT '02003', '한땡땡', '회계', '2018', '' FROM dual ) SELECT LPAD(' ', 4*(LEVEL-1)) || emp_name emp_name, emp_no, CONNECT_BY_ROOT emp_no "Root emp_no", level FROM T WHERE dept = '회계' START WITH manager_no IS NULL CONNECT BY PRIOR emp_no=manager_no;
결과가 좀 이상한데요?
"2018년에 입사한 사원 중에 부서가 회계팀인 사원"은 총 3명인데? 결과는 왜 1건이죠?
혹시 최땡땡과 한땡땡의 입사년도 '2018' 은 오타인가요?
WITH t(emp_no, emp_name, dept, ent_year, manager_no) AS ( SELECT '18001', '김땡땡', '회계', '2018', '17001' FROM dual UNION ALL SELECT '18002', '이땡땡', '인사', '2018', '17001' FROM dual UNION ALL SELECT '17001', '박땡땡', '회계', '2017', '15001' FROM dual UNION ALL SELECT '15001', '최땡땡', '회계', '2015', '02003' FROM dual UNION ALL -- 오타 수정 SELECT '02003', '한땡땡', '회계', '2002', '' FROM dual -- 오타 수정 ) SELECT CONNECT_BY_ROOT(emp_no ) emp_no , CONNECT_BY_ROOT(emp_name) emp_name , emp_no manager_no , emp_name manager_name FROM t WHERE CONNECT_BY_ISLEAF = 1 START WITH ent_year = '2018' AND dept = '회계' CONNECT BY PRIOR manager_no = emp_no ;