2017-05-05 59 views
0

我是PeopleSoft和SQL的新手,需要一些幫助來解決這個問題。如果那麼在PeopleSoft查詢語句

我想弄清楚如何在PS Query中使用if-then類型的語句來最好地編寫查詢。我認爲案例陳述應該起作用。

標準來滿足(這是我堅持的部分): IF域ACTION = TER然後場DEPTID <> 140,652,653,997

我的情況說明: 情況下A.ACTION ='TER',那麼A.DEPTID不在('140','652','653','997')end

如果會的話,我不知道如何在我的SQL語句中使用它。我試圖在子查詢和表達式中使用它,但它不起作用。

當我試圖加入這個case語句到標準作爲一種表達,在PS查詢工具拋出這個錯誤:

錯誤的位置:347回:905 - ORA-00905:缺少關鍵字 失敗

我不知道哪個關鍵字丟失。

我的詢問,到目前爲止有:AND:

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 

)) 前面的括號END(如下圖),當我用下面的case語句中的表達式,情況如下最後一行後移G.ACTION = F.ACTION。

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

我對此很新,歡迎任何幫助。

回答

1

在這裏,在合併報表不使用情況下,實施

  1. A.ACTION IS不等於 'TER'

OR

  • A.ACTION IS NULL
  • OR

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

    +0

    嗨,這個運行沒有錯誤。我將在下週與我的導師覈實,返回的結果是我們所期望的。謝謝你的幫助。 – Tony

    0

    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) 
    
    +0

    嗨,我寫的,正是因爲它是在給我傳遞的標準: 我理解這樣的說法: IF域ACTION = TER然後現場DEPTID <> 140, 652,653,997 的意思是: if A.ACTION ='TER'then A.DEPTID not in('140','652','653','997') 因此,我寫了我的情況聲明爲: AND A.ACTION = 案例 \t when A.ACTION ='TER' \t then A.DEPTID not in('140','652','653','997') end)) – Tony