我是BI Publisher的新手,我通过Oracle Fusion Applications使用它。
我正在尝试撰写有关组织中非活动员工的报告。但是,我无法弄清楚如何查询不活动或已终止的员工。
我最初使用此查询:
SELECT PERSON_ID, PERSON_NUMBER, EFFECTIVE_START_DATE, EFFECTIVE_END_DATE
FROM PER_ALL_PEOPLE_F
WHERE TRUNC(SYSDATE) NOT BETWEEN TRUNC(EFFECTIVE_START_DATE) AND TRUNC(EFFECTIVE_END_DATE)
我的其他考虑因素是来自PER_ALL_ASSIGNMENTS_M表的属性,包括PRIMARY_WORK_RELATION_FLAG,PRIMARY_ASSIGNMENT_FLAG和ASSIGNMENT_TYPE,考虑到员工的分配详细信息会以某种方式提供帮助。但是我没有成功。
我想知道是否有其他正确的方法来查询非活动员工。在任何表格中是否有任何特定属性可以告诉我某个员工是否有效或被终止?当员工在Oracle Fusion中终止时,所有表属性都会受到影响吗?
感谢您的帮助。
答案 0 :(得分:3)
最简单的方法就是:
SELECT * FROM YourTable t
WHERE TRUNC(t.END_DATE) <= trunc(sysdate)
有时候还有一个像IS_ACTIVE
之类的指示栏。您还可以考虑添加它,并将其更新为1,以便从上述查询返回的所有记录。
除此之外,我们无法真正帮助你。我们不知道您的表结构,我们不知道您在其中存储了哪些数据以及哪个列指示了什么。
答案 1 :(得分:3)
我找到了我想要的东西。 ASSIGNMENT_STATUS_TYPE =&#39; INACTIVE&#39;是我所需要的(正如问题所述,这个解决方案没有考虑&#39; EFFECTIVE_END_DATE&#39;)获得最新的&#39;我需要找到一份员工的任务状态。如果员工只分配了一个分配,则以下查询有效。
SELECT PAPF.PERSON_ID, PAPF.PERSON_NUMBER
FROM PER_ALL_PEOPLE_F PAPF, PER_ALL_ASSIGNMENTS_M PAAM
WHERE 1=1
AND TRUNC(PAAM.EFFECTIVE_START_DATE) = (SELECT MAX(TRUNC(PAAM_INNER.EFFECTIVE_START_DATE))
FROM PER_ALL_ASSIGNMENTS_M PAAM_INNER
WHERE PAAM_INNER.PERSON_ID=PAAM.PERSON_ID
GROUP BY PAAM_INNER.PERSON_ID)
AND PAPF.PERSON_ID=PAAM.PERSON_ID
AND PAAM.PRIMARY_FLAG='Y'
AND PAAM.ASSIGNMENT_STATUS_TYPE='INACTIVE'
AND TRUNC(SYSDATE) BETWEEN PAAM.EFFECTIVE_START_DATE AND PAAM.EFFECTIVE_END_DATE
AND TRUNC(SYSDATE) BETWEEN PAPF.EFFECTIVE_START_DATE AND PAPF.EFFECTIVE_END_DATE
ORDER BY 1 ASC
我从Oracle支持社区获得了帮助以获得答案。 链接:https://community.oracle.com/message/14000136#14000136
然而,如果员工从2000年开始到20015结束,然后从2016年到现在再进行另一项任务,上述查询将返回该员工的一条记录为“非活动” #39;如果未检查Max Effective_start_date条件。 (自2015年成为非活动版),即使她目前的作业状态为“活跃”,也是如此。她目前没有被终止。
在这种情况下,最好用最有效的&EFFECTIVE_START_DATE&#39;来检索记录。来自PER_ALL_ASSIGNMENTS_M表,即检查EFFECTIVE_START_DATE = MAX(EFFECTIVE_START_DATE)