Я использую приведенный ниже запрос, чтобы получить несколько столбцов. Теперь, если данные в таблице cs равны нулю, я все еще хочу получить все значения. Внешнее объединение работает нормально, но, поскольку у меня есть условие (select max(date_From) from cmp_Salary cs1 where cs1.assignment_id = cs.assignment_id)
, сотрудники с таблицей CS, не имеющие никакого значения, не получают. Как я могу использовать NVL на этом max(data_from
), чтобы я мог получить значение из этой таблицы, когда оно равно нулю, и когда есть значение в таблице cs, это условие проверено?
select (CASE when PAAM.action_code = 'GLB_TRANSFER' then to_char(paam.effective_start_date,'YYYY-MM-DD') ELSE to_char(papf.START_DATE,'YYYY-MM-DD') END) "Hire_Date"
,to_char(PPS.DATE_START,'YYYY-MM-DD') "PPS Start Date"
,papf.person_number "Person_Number"
,to_char(paam.effective_start_date,'YYYY-MM-DD') "effective Start Date"
,paam.EFFECTIVE_SEQUENCE "Effective Sequence"
,paam.EFFECTIVE_LATEST_CHANGE "Effective Latest Change"
,paam.assignment_number "Assignment_Number"
,paam.action_code "Action_Code"
,(select haou.name
from hr_all_organization_units haou
where haou.organization_id = paam.LEGAL_ENTITY_ID) "Legal_Emp",
csbt.SALARY_BASIS_NAME "Salary_Basis",
to_char(cs.date_From,'YYYY-MM-DD') "Salary_Start_Date",
cs.salary_amount "Salary_Amount",
cs.currency_code new_curr_Code,
(Case cs.currency_code
when 'CAD' then '2019-07-28'
else '2019-08-05'
end) new_dt,
(case csbt.SALARY_BASIS_NAME
when 'CA Salary' then (cs.salary_amount*12)
when 'CA Salary No Time' then (cs.salary_amount*12)
else cs.salary_amount
end) new_amt
--cs.salary_amount new_amt
From per_all_people_f papf,
per_all_assignments_m paam,
cmp_salary cs,
CMP_SALARY_BASES_TL csbt,
PER_PERIODS_OF_SERVICE PPS
where papf.person_id = paam.person_id
and paam.assignment_id = cs.assignment_id(+)
and cs.SALARY_BASIS_ID = csbt.SALARY_BASIS_ID(+)
AND PAAM.PRIMARY_FLAG = 'Y'
AND PAAM.EFFECTIVE_LATEST_CHANGE = 'Y'
AND PAAM.assignment_type in ('C','E')
and sysdate BETWEEN PAAM.EFFECTIVE_START_DATE AND PAAM.EFFECTIVE_END_DATE
and sysdate BETWEEN PAPF.EFFECTIVE_START_DATE AND PAPF.EFFECTIVE_END_DATE
and cs.date_from = nvl((select max(date_From) from cmp_Salary cs1 where cs1.assignment_id = cs.assignment_id),cs.date_from )
and csbt.language = 'US'
and paam.ASSIGNMENT_STATUS_TYPE='ACTIVE'
and PPS.PERSON_ID=papf.PERSON_ID
and PPS.PERIOD_OF_SERVICE_ID=paam.PERIOD_OF_SERVICE_ID
and papf.person_number in '1755'
order by 1