PeopleSoft 查询中的 if then 语句

if then statement in PeopleSoft Query

我是 PeopleSoft 的新手,SQL 需要一些帮助来解决这个问题。

我正在尝试弄清楚如何在 PS 查询中使用 if-then 类型的语句最好地编写查询。我认为案例陈述应该有效。

要满足的标准(这是我卡住的部分): IF Field ACTION = TER then field DEPTID <> 140, 652, 653, 997

我的案例陈述: 当 A.ACTION = 'TER' 然后 A.DEPTID 不在 ('140','652','653','997') end

中的情况

如果可以,我不确定如何在我的 SQL 语句中使用它。我尝试在子查询和表达式中使用它,但它没有用。

当我尝试将此 case 语句作为表达式添加到条件中时,PS 查询工具抛出此错误:

错误位置:347 Return:905 - ORA-00905: 缺少关键字 失败

不知道漏了哪个关键字

我的查询,到目前为止:

SELECT *
  FROM 
    PS_JOB A, 
    PS_EMPLMT_SRCH_QRY A1, 
    PS_COL_HR_WF_ROLE B, 
    PS_NAMES_VW C, 
    PS_NAMES_VW D, 
    PS_PER_ORG_ASGN E, 
    PS_EMPLMT_SRCH_QRY E1, 
    PS_ACTN_REASON_TBL F, 
    PS_ACTION_TBL G
  WHERE ( A.EMPLID = A1.EMPLID
    AND A.EMPL_RCD = A1.EMPL_RCD
    AND ( A.ACTION_DT = TO_DATE('2016-07-19','YYYY-MM-DD')
     AND A.EMPL_RCD = B.EMPL_RCD
     AND A.DEPTID <> '997'
     AND A.REG_TEMP = 'R'
     AND A.FULL_PART_TIME = 'F'
     AND B.ROLENAME = 'name of role'
     AND B.ACTION = A.ACTION
     AND B.ACTION_REASON = A.ACTION_REASON
     AND C.EMPLID = A.EMPLID
     AND C.NAME_TYPE = 'PRI'
     AND D.NAME_TYPE = 'PRI'
     AND A.SUPERVISOR_ID = D.EMPLID
     AND E.EMPLID = A.EMPLID
     AND E.EMPL_RCD = A.EMPL_RCD
     AND F.ACTION = B.ACTION
     AND F.ACTION_REASON = B.ACTION_REASON
     AND G.ACTION = F.ACTION 

)) 当我在表达式中使用以下 case 语句时,前面的大括号移动到 END(下面)之后,并且 case 位于最后一行:AND G.ACTION = F.ACTION.

AND A.ACTION = Case when  A.ACTION = 'TER' then  A.DEPTID not in ('140','652','653','997') end ))

我对此很陌生,欢迎任何帮助。

CASE 中的 THEN 关键字需要一个值,您正在给它另一个条件。

我不完全确定你希望你的条件是什么。 我假设您的意思是,当 ACTION='TER' 时,您希望在 ('140','652','653','997').

中过滤具有 DEPTID 的行

一种方法是将其添加到您的过滤谓词中:

1 = (CASE WHEN A.ACTION = 'TER' AND A.DEPTID in ('140','652','653','997')
          THEN 0
          ELSE 1
      END)

这里,在不使用CASE的组合语句中,实现的是

  1. A.ACTION 不等于 'TER'

  1. A.ACTION 为空

  1. A.ACTION 等于 'TER' 且 A.DEPTID 不在列表中

AND (A.ACTION != 'TER' OR A.ACTION IS NULL OR (A.ACTION = 'TER' and A.DEPTID NOT IN ('140','652','653','997'))