我想這個查詢返回只有一行。我在CASE語句的子句中按照它們最有可能發生的順序放在那裏,所以最可能的TRUE語句將始終首先評估。但是,似乎每個WHEN語句在查詢結束之前都要進行評估,儘管它找到了多個TRUE語句。WHERE CASE返回多個行
SELECT To_Char(T.PRFINISH, 'DD/MM/YY') FINISH,
T.PRNAME
FROM PRTASK T
LEFT OUTER JOIN INV_INVESTMENTS ON T.PRPROJECTID = INV_INVESTMENTS.ID
WHERE T.PRNAME = CASE
WHEN (T.PRNAME = 'Concept Tech PEP Meeting Date' AND T.PRSTATUS != 2) THEN 'Concept Tech PEP Meeting Date'
WHEN (T.PRNAME = 'Concept BRU Meeting Date' AND T.PRSTATUS != 2) THEN 'Concept BRU Meeting Date'
WHEN (T.PRNAME = 'End of Concept Phase' AND T.PRSTATUS != 2) THEN 'End of Concept Phase'
WHEN (T.PRNAME = 'Evaluate Tech PEP Meeting Date' AND T.PRSTATUS != 2) THEN 'Evaluate Tech PEP Meeting Date'
WHEN (T.PRNAME = 'Evaluate BRU Meeting Date' AND T.PRSTATUS != 2) THEN 'Evaluate BRU Meeting Date'
WHEN (T.PRNAME = 'Evaluate TSC Meeting Date' AND T.PRSTATUS != 2) THEN 'Evaluate TSC Meeting Date'
WHEN (T.PRNAME = 'End of Evaluate Phase' AND T.PRSTATUS != 2) THEN 'End of Evaluate Phase'
WHEN (T.PRNAME = 'End of Analyse Phase' AND T.PRSTATUS != 2) THEN 'End of Analyse Phase'
WHEN (T.PRNAME = 'End of Design Phase' AND T.PRSTATUS != 2) THEN 'End of Design Phase'
WHEN (T.PRNAME = 'End of Build Phase' AND T.PRSTATUS != 2) THEN 'End of Build Phase'
WHEN (T.PRNAME = 'End of Test Phase' AND T.PRSTATUS != 2) THEN 'End of Test Phase'
WHEN (T.PRNAME = 'In Service' AND T.PRSTATUS != 2) THEN 'In Service'
WHEN (T.PRNAME = 'End of Implement Phase' AND T.PRSTATUS != 2) THEN 'End of Implement Phase'
WHEN (T.PRNAME = 'End of Closure Phase' AND T.PRSTATUS != 2) THEN 'End of Closure Phase'
ELSE 'In Service'
END
AND INV_INVESTMENTS.CODE = '007058'
即使第一個WHEN子句爲真,這也會返回多行。我認爲CASE報表在他們發現TRUE語句時完成了。
編輯:也許我不解釋這口井,讓我們試試這個:
在INV_INVESTMENTS表中的每個ID是一個項目。每個項目在PRTASK表中都有一組任務。在這種PRTASK表,我們將有工作的(PRNAME)的名稱,狀態(PRSTATUS)和完成日期(PRFINISH)。任務列表,在它們出現在一個項目的順序是:
1.概念科技PEP會議日期
2.概念BRU會議日期
3.概念的結束階段
4.評估技術PEP會議日期
5. Evalute BRU會議日期
6. EV aluate TSC會議日期
其餘的任務都按我在CASE聲明中列出的順序排列。我想這個查詢返回,是完成日期在列表中的第一個任務爲0或1
的'CASE'是爲表(或多個)每行評估。所有符合'WHERE'條件的行都包含在結果集中。你錯誤地使用'CASE'陳述。對於每一行有PRSTATUS!= 2 [和其中包含的PNAME,看起來都是它們] OR PRNAME ='In Service'AND INV_INVESTMENTS.CODE ='007058','WHERE'子句將評估爲TRUE,並返回該行。也許如果您提供了示例輸入數據和預期結果,我可以嘗試編寫查詢。 – Turophile
@Turophile,我想只返回T.PRNAMEs之一的完成日期。雖然多個可以是真實的,但一次只有一個是相關的(並且與列出的順序相關,即Concept Concept PEP會議日期的PRSTATUS爲2,在數據庫中意味着已完成,Concept BRU會議日期就成爲我想要查找的內容)。我一直在試圖找出邏輯寫這個最好的方法。我的邏輯是,如果他們按照出現的順序,那麼我總是會找到下一個最相關的PRNAME。我想不是這種情況。 –
PRSTATUS是什麼? –