Oracle Fusion HCM - Query to get Number of manager change for an employee
✅ Purpose
This query fetches the number of manager changes (specifically line manager) per employee between a selected date range, displaying current and historical manager assignments.
✅ Table details
PER_ALL_PEOPLE_F– Employee personal dataPER_ALL_ASSIGNMENTS_M– Assignment-level dataPER_ASSIGNMENT_SUPERVISORS_F– Supervisor (manager) historyPER_PERIODS_OF_SERVICE– Employee service periodsPER_PERSON_NAMES_F– Full names of employees and managers
๐งพ Final SQL Query
รฐ SELECT DISTINCT
EMP.PERSON_NUMBER EMPLOYEE_NUMBER,
EMP_NAME.FULL_NAME EMP_NAME,
MGR_NAME.FULL_NAME MANAGER_NAME,
MGR.PERSON_NUMBER SUPERVISOR_EMP_NUMBER,
to_char(PASF.EFFECTIVE_START_DATE,'yyyy/mm/dd') EFFECTIVE_DATE_DATA_CHANGE,
to_char(PASF.EFFECTIVE_START_DATE,'yyyy/mm/dd') EFFECTIVE_DATE_MANAGER,
FLV.MEANING MANAGER_TYPE,
(COUNT(DISTINCT MGR.PERSON_NUMBER ) OVER (PARTITION BY EMP.PERSON_ID)) Mgr_count
FROM
PER_ALL_PEOPLE_F EMP,
PER_ALL_ASSIGNMENTS_M PAAM_EMP,
PER_ASSIGNMENT_SUPERVISORS_F PASF,
PER_ALL_PEOPLE_F MGR,
PER_PERIODS_OF_SERVICE PPS,
PER_PERSON_NAMES_F EMP_NAME,
PER_PERSON_NAMES_F MGR_NAME,
FND_LOOKUP_VALUES FLV
WHERE
EMP.PERSON_ID = PAAM_EMP.PERSON_ID
AND PAAM_EMP.PRIMARY_ASSIGNMENT_FLAG = 'Y'
AND PAAM_EMP.ASSIGNMENT_TYPE = 'E'
and PAAM_EMP.PRIMARY_FLAG='Y'
AND PAAM_EMP.EFFECTIVE_LATEST_CHANGE = 'Y'
AND ACTION_CODE ='MANAGER_CHANGE'
AND EMP.PERSON_ID = PASF.PERSON_ID
AND PASF.ASSIGNMENT_ID = PAAM_EMP.ASSIGNMENT_ID
AND PASF.MANAGER_TYPE in('LINE_MANAGER')
AND MGR.PERSON_ID = PASF.MANAGER_ID
AND PAAM_EMP.PERIOD_OF_SERVICE_ID = PPS.PERIOD_OF_SERVICE_ID
AND PAAM_EMP.PERSON_ID = PPS.PERSON_ID
AND PPS.DATE_START= (SELECT MAX(DATE_START) FROM PER_PERIODS_OF_SERVICE PPOS_IN WHERE EMP.PERSON_ID=PPOS_IN.PERSON_ID AND PPOS_IN. PRIMARY_FLAG='Y')
AND MGR.PERSON_ID=MGR_NAME.PERSON_ID
AND MGR_NAME.NAME_TYPE = 'GLOBAL'
AND EMP.PERSON_ID = EMP_NAME.PERSON_ID
AND EMP_NAME.NAME_TYPE = 'GLOBAL'
AND FLV.LOOKUP_TYPE ='PER_SUPERVISOR_TYPE'
AND FLV.LOOKUP_CODE= PASF.MANAGER_TYPE
and FLV.LANGUAGE='US'
AND TRUNC(PAAM_EMP.EFFECTIVE_START_DATE) BETWEEN EMP_NAME.EFFECTIVE_START_DATE AND EMP_NAME.EFFECTIVE_END_DATE
AND TRUNC(PAAM_EMP.EFFECTIVE_START_DATE) BETWEEN MGR_NAME.EFFECTIVE_START_DATE AND MGR_NAME.EFFECTIVE_END_DATE
AND TRUNC(PAAM_EMP.EFFECTIVE_START_DATE) BETWEEN EMP.EFFECTIVE_START_DATE AND EMP.EFFECTIVE_END_DATE
AND TRUNC(PAAM_EMP.EFFECTIVE_START_DATE) BETWEEN MGR.EFFECTIVE_START_DATE AND MGR.EFFECTIVE_END_DATE
AND TRUNC(PAAM_EMP.EFFECTIVE_START_DATE) BETWEEN PASF.EFFECTIVE_START_DATE AND PASF.EFFECTIVE_END_DATE
AND to_date(TO_CHAR( PAAM_EMP.EFFECTIVE_START_DATE,'MM/DD/YYYY'),'MM/DD/YYYY') between to_DATE(:Effective_Date_From,'MM/DD/YYYY') and to_DATE(:Effective_Date_To,'MM/DD/YYYY')
ORDER BY EMP.PERSON_NUMBER
Comments
Post a Comment