如果然后在PeopleSoft Query中声明

时间:2017-05-05 15:27:18

标签: sql oracle peoplesoft

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

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

见面的标准(这是我被困的部分): 如果字段ACTION = TER则字段DEPTID<> 140,652,653,997

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

如果愿意,我不知道如何在我的SQL语句中使用它。我尝试在子查询和表达式中使用它,但它没有用。

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

错误位置:347返回: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(下面)之后移动,大小写在最后一行之后:AND G.ACTION = F.ACTION。

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

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

2 个答案:

答案 0 :(得分:1)

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

  1. A.ACTION不等于&#39; TER&#39;
  2. OR

    1. A.ACTION IS NULL
    2. OR

      1. A.ACTION等于&#39; TER&#39; AND A.DEPTID不在列表中
      2. AND (A.ACTION != 'TER' OR A.ACTION IS NULL OR (A.ACTION = 'TER' and A.DEPTID NOT IN ('140','652','653','997'))

答案 1 :(得分:0)

CASE中的THEN-keyword需要一个值,你给它另一个条件。

我不完全确定你想要的条件是什么。 我认为您的意思是,当ACTION =&#39; TER&#39;时,您希望在(&#39; 140&#39;,&#39; 652&#39;,&#39; 653&}中过滤带有DEPTID的行#39;,&#39; 997&#39;。)

通过将此添加到过滤器谓词中,可以实现一种方法:

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