오라클에 employee
테이블이 있습니다.이 테이블은 일종의 비즈니스 규칙 인 테이블 future_jobs
에 "미래"작업이 1,2 개있을 수 있습니다.상관 관계가있는 서브 쿼리를 케이스에서 꺼내십시오. 문
| employee_id | job_id | job_start_date | job_end_date |
|-------------|--------|----------------|--------------|
| 1 | 127589 | 12-SEP-2016 | 25-DEC-2016 |
| 1 | 834780 | 26-DEC-2016 | 08-AUG-2017 |
| 2 | 800253 | 20-OCT-2016 | 13-APR-2017 |
특정 매개 변수로 저장 프로 시저를 호출하여 향후 각 작업에 대한 설명을 얻어야합니다. F1
및 F2
이며, 내림차순은 job_start_date
입니다. 위의 예에서, 사람 job_start_date = 12-SEP-2016
job_id = 127589
아래 행에 대해 실행되는 쿼리, employee_id = 1
위한 두 열 중 빠른 날짜가 employee_id = 1
위해, get_description(emp.employee_id, 'F1')
호출되어야하고 job_id = 834780
위한 get_description(emp.employee_id, 'F2')
.
및 employee_id = 2
의 경우 향후 작업이 하나뿐이므로 이후 쿼리로 get_description(emp.employee_id, 'F1')
을 호출해야합니다. 현재 다음 검색어로 관련 정보를 가져올 수 있습니다.
select
emp.employee_id,
case
when fj.job_start_date = (select max(job_start_date)
from future_jobs
where employee_id = fj.employee_id
group by employee_id
having count(employee_id) > 1)
then get_description(emp.employee_id, 'F2')
else get_description(emp.employee_id, 'F1')
end job_description,
fj.job_start_date
jd.some_additional_columns
from employees emp
join future_jobs fj
on emp.employee_id = fj.employee_id
join job_details jd
on jd.job_id = fj.job_id
and jd.job_start_date = fj.job_start_date
and jd.job_end_date = fj.job_end_date
| employee_id | job_description | job_start_date | jd.columns |
|-------------|----------------------|----------------|--------------|
| 1 | 1st future job desc | 12-SEP-2016 | .... |
| 1 | 2nd future job desc | 26-DEC-2016 | .... |
| 2 | 1st future job desc | 20-OCT-2016 | .... |
그러나 CASE WHEN 문에서 상관 하위 쿼리를 가져 오는 다른 방법이 있는지 알고 싶습니다. 상관 하위 쿼리를 사용하지 않고도이를 수행 할 수있는 방법이 있습니까? 나는 이것을 WITH
절 유형의 솔루션을 사용하는 대신 한 문장으로 처리해야합니다.
감사합니다. 그게 내가 찾고 있던거야. 쿼리가 반환해야하는 내용을 설명하기 위해 설명을 업데이트했습니다. 이 솔루션의 성능과 질문의 성능을 어떻게 비교합니까? 어떤 조건에서 파티셔닝과 분석 기능이 더 잘 수행됩니까? – Malvon