Используя ваш запрос с современным синтаксисом соединения, он выглядит примерно так:
SELECT (EEV.SCREEN_ENTRY_VALUE)/12 SALARY
FROM apps.PER_JOBS_TL JBT
LEFT JOIN apps.PER_ALL_ASSIGNMENTS_F ASF ON JBT.JOB_ID = ASF.JOB_ID
JOIN apps.PER_PEOPLE_F PER ON PER.PERSON_ID = ASF.PERSON_ID
JOIN apps.PAY_ASSIGNMENT_ACTIONS PAA ON PAA.ASSIGNMENT_ID = ASF.ASSIGNMENT_ID
JOIN apps.PAY_PAYROLL_ACTIONS PPA ON PAA.PAYROLL_ACTION_ID = PPA.PAYROLL_ACTION_ID
AND PPA.DATE_EARNED BETWEEN ASF.EFFECTIVE_START_DATE AND ASF.EFFECTIVE_END_DATE
AND PPA.DATE_EARNED BETWEEN PER.EFFECTIVE_START_DATE AND PER.EFFECTIVE_END_DATE
JOIN apps.PER_PAY_BASES PPB ON PPB.PAY_BASIS_ID = ASF.PAY_BASIS_ID
JOIN PAY_ELEMENT_ENTRY_VALUES_F EEV ON EEV.INPUT_VALUE_ID+0 = PPB.INPUT_VALUE_ID
AND PPA.DATE_EARNED BETWEEN EEV.EFFECTIVE_START_DATE AND EEV.EFFECTIVE_END_DATE
JOIN apps.PAY_ELEMENT_ENTRIES_F EE ON EE.ASSIGNMENT_ID = ASF.ASSIGNMENT_ID
AND EE.ELEMENT_ENTRY_ID = EEV.ELEMENT_ENTRY_ID
AND PPA.DATE_EARNED BETWEEN EE.EFFECTIVE_START_DATE AND EE.EFFECTIVE_END_DATE
WHERE UPPER(PER.Employee_number) LIKE '%'
AND PPA.ACTION_TYPE IN ('R','Q','P','U','V')
AND ASF.CREATION_DATE BETWEEN ASF.EFFECTIVE_START_DATE AND ASF.EFFECTIVE_END_DATE
AND PPA.EFFECTIVE_DATE BETWEEN '01-dec-2019' AND '31-dec-2019'
Я только что понял, что вы, вероятно, пропустили условие соединения для таблицы apps.PAY_ASSIGNMENT_ACTIONS
. Это может быть основной проблемой дублирования вашего результата. Это нормально, если у вас нет других условий соединения для этой таблицы.
Для ускорения запроса вы можете попробовать использовать индексы в таблицах ниже -
apps.PER_JOBS_TL (JOB_ID) -- Not required if it is primary key
apps.PER_ALL_ASSIGNMENTS_F (JOB_ID, PERSON_ID, EFFECTIVE_START_DATE, EFFECTIVE_END_DATE ) -- Not required on primary key columns
apps.PER_PEOPLE_F (PERSON_ID, EFFECTIVE_START_DATE, EFFECTIVE_END_DATE) -- Not required on primary key columns
apps.PAY_ASSIGNMENT_ACTIONS(ASSIGNMENT_ID) -- Not required if it is primary key
apps.PAY_PAYROLL_ACTIONS(ACTION_TYPE, EFFECTIVE_DATE, DATE_EARNED) -- Not required on primary key columns
apps.PER_PAY_BASES(PAY_BASIS_ID, INPUT_VALUE_ID) -- Not required on primary key columns
PAY_ELEMENT_ENTRY_VALUES_F(INPUT_VALUE_ID, ELEMENT_ENTRY_ID, EFFECTIVE_START_DATE, EFFECTIVE_END_DATE) -- Not required on primary key columns
apps.PAY_ELEMENT_ENTRIES_F(ASSIGNMENT_ID,ELEMENT_ENTRY_ID, EFFECTIVE_START_DATE,EFFECTIVE_END_DATE) -- Not required on primary key columns