我是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 ))
我对此很陌生,欢迎任何帮助。
答案 0 :(得分:1)
这里,在不使用CASE的组合语句中,它正在实现
OR
OR
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)