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的组合语句中,实现的是
- A.ACTION 不等于 'TER'
或
- A.ACTION 为空
或
- 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'))
我是 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的组合语句中,实现的是
- A.ACTION 不等于 'TER'
或
- A.ACTION 为空
或
- 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'))