是否有可能在一份报告中获得当前和以前的工资?

时间:2017-04-11 16:50:35

标签: peoplesoft

我是peopleoft的新手,我现在正在建立一份报告,我希望在一段时间内获得员工的当前和之前工资。例如,如果员工A在2017年获得加薪,那么我希望在两个不同的栏目中看到先前和当前薪水。我试图修改的报告是所有当前信息。我已经添加了包含工资数据的EE工作记录。该报告已有此记录,所以现在有两个; A和C.我想用C来回顾一下之前的工资。

我认为我可以通过修改条件,条件类型(eff date<)然后将表达式2作为字段(A.EFFDT)来完成此操作。但这并没有起作用。

我是否完全偏离基地(人们可以这样做吗?)

2 个答案:

答案 0 :(得分:2)

我认为,在PeopleSoft Query中,考虑所有EFFDT和EFFSEQ的完整解决方案很困难,但您的想法可以通过几个假设得出结论。

  • 一个是获得“旧工资”,我们总是在“当前”工作行之前至少一天看到一个JOB行。这意味着我无法看到多个EFFSEQ在同一天发生的工资变化。
  • 第二个假设不是处理多个工作,所以EMPL_RCD也是如此。

如你所述,你会有一个查询,JOB表被添加两次,所以JOB A和JOB C.在标准中你会有以下内容:

  • A.EFFDT Eff Date< =当前日期(EffSeq = Last) - 如果您只想要当前行
  • AND A.EMPLID等于B.EMPLID
  • AND A.EMPL_RCD等于B.EMPL_RCD
  • AND Field B.EFFDT Eff Date< Field A.EFFDT EffSeq = Last

您还可以根据需要添加活动员工或特定EMPLID,但不希望JOB表之间有任何其他联接。

SQL会看起来像这样......

select a.emplid, a.empl_rcd, a.effdt, a.effseq
     , a.annual_rt as new_salary, c.effdt, c.effseq, c.annual_rt as old_salary
from ps_job a, ps_job c
where a.emplid = c.emplid
and a.empl_rcd = c.empl_rcd
and a.effdt = (select max(a1.effdt) from ps_job a1
               where a1.emplid = a.emplid
               and a1.empl_rcd = a.empl_rcd
               and a1.effdt <= sysdate)
and a.effseq = (select max(a2.effseq) from ps_job a2
                where a2.emplid = a.emplid
                and a2.empl_rcd = a.empl_rcd
                and a2.effdt = a.effdt)    
and c.effdt = (select max(c1.effdt) from ps_job c1
               where c1.emplid = c.emplid
               and c1.empl_rcd = c.empl_rcd
               and c1.effdt < a.effdt)
and c.effseq = (select max(c2.effseq) from ps_job c2
                where c2.emplid = c.emplid
                and c2.empl_rcd = c.empl_rcd
                and c2.effdt = c.effdt)
order by a.emplid, a.empl_rcd, a.effdt desc, c.effdt desc

这将为每个EE提供当前行,并为最大作业行提供至少前一天的费率。如果您想要所有行,请删除当前行逻辑。

答案 1 :(得分:2)

SQL只是部分正确。您可以在同一天进行多项操作。你有c.effdt as&lt; a.effdt。我不知道每次都是如此。

从SQL的角度来看,你需要有一个OR语句。

( a.effseq = 0
and  c.effdt = (select max(c1.effdt) from ps_job c1
               where c1.emplid = c.emplid
               and c1.empl_rcd = c.empl_rcd
               and c1.effdt < a.effdt)
and c.effseq = (select max(c2.effseq) from ps_job c2
                where c2.emplid = c.emplid
                and c2.empl_rcd = c.empl_rcd
                and c2.effdt = c.effdt)
)
or
(a.effseq > 0 
and a.effdt = c.effdt 
and c.effseq = (a.effseq -1)
)