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

  • 本文关键字:报告 是否 一份 peoplesoft
  • 更新时间 :
  • 英文 :


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

我想我可以通过修改条件、条件类型(eff date <)然后将表达式 2 作为字段 (A.EFFDT) 来做到这一点。但这并没有奏效。

我完全偏离了基础(Peoplesoft可以做到这一点吗?

我认为在PeopleSoft Query中很难找到一个完整的解决方案来考虑所有EFFDT和EFFSEQ,但是您的想法可以通过几个假设来接近。

  • 一种是,为了获得"旧工资",我们总是在"当前"工作行之前至少一天查看 JOB 行。这意味着我看不到同一天发生多个 effseq 的工资变化。
  • 第二个假设不是处理多个作业,所以相同的EMPL_RCD。

如您所描述的那样,您将有一个查询,其中 JOB 表添加了两次,因此 JOB A 和 JOB C。 在条件中,您将具有以下内容:

  • A.EFFDT eff date <= 当前日期 (EffSeq = Last) -- 如果您只需要当前行
  • 和 A.EMPLID 等于 B.EMPLID
  • 和 A.EMPL_RCD等于B.EMPL_RCD
  • AND 字段 B.EFFDT
  • eff date<字段 A.EFFDT=" EffSeq="Last</li">

您还可以仅添加在职员工,也可以根据需要添加特定的 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 提供当前行以及至少在前一天的最大作业行的速率。 如果需要所有行,请删除当前行逻辑。

该SQL仅部分正确。您可以在同一天执行多项操作。你有 c.effdt 作为 <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)
)

最新更新