2014-11-05 122 views
1

我在這裏做錯了什麼我不能爲我的生活弄清楚這一點我知道它不能是這個硬的權利?WHERE語句中的PL/SQL條件語句

SELECT SCALED_SCORE 
FROM NEUROCOG.SCALED_SCORE_RAW 
WHERE DDID = 2737 

AND (CASE 

    WHEN SYNTAX = '>=' THEN AND 6 BETWEEN RAW_SCORE_START AND RAW_SCORE_END; 
    WHEN SYNTAX = '<=' THEN AND 6 BETWEEN RAW_SCORE_END AND RAW_SCORE_START; 
    WHEN SYNTAX IS NULL THEN AND 6 BETWEEN RAW_SCORE_START AND RAW_SCORE_END; 

END CASE); 

請幫助

+0

在你的問題中沒有PL/SQL – 2014-11-05 18:21:49

+0

解釋一些你想做什麼,只是用代碼我不知道如何幫助你。如果有幫助,請查看PL-SQL中的CASE語句:http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/case_statement.htm – 2014-11-05 18:26:40

+0

你想達到什麼目的?這個查詢應該做什麼? – Mureinik 2014-11-05 18:27:38

回答

1

滑稽。今天一個同事的問題完全一樣。你是他嗎? :)

在where子句中不能有這樣的條件。 A case只能返回一個值(甚至不包括布爾值/比較結果)。

但是,您可以使用AND將您想要的條件與具有特定「語法」的「前提條件」結合起來。很難說清楚,但查詢應該看起來像這樣:

SELECT SCALED_SCORE 
FROM NEUROCOG.SCALED_SCORE_RAW 
WHERE DDID = 2737 
AND (
    (SYNTAX = '>=' AND 6 BETWEEN RAW_SCORE_START AND RAW_SCORE_END) OR 
    (SYNTAX = '<=' AND 6 BETWEEN RAW_SCORE_END AND RAW_SCORE_START) OR 
    (SYNTAX IS NULL AND 6 BETWEEN RAW_SCORE_START AND RAW_SCORE_END) 
) 

該查詢是您似乎嘗試的文字翻譯。

稍微不同的方法也可以。 BETWEEN .. AND ..需要兩個數字表達式,每一個都可以是一個case語句,這樣你就可以寫這樣的事情:

SELECT SCALED_SCORE 
FROM NEUROCOG.SCALED_SCORE_RAW 
WHERE DDID = 2737 
AND (
    6 BETWEEN 
     CASE WHEN SYNTAX = '<=' THEN RAW_SCORE_END ELSE RAW_SCORE_START END 
    AND 
     CASE WHEN SYNTAX = '<=' THEN RAW_SCORE_START ELSE RAW_SCORE_END END 
) 

是更好,更快?我不知道。更可讀?在這種情況下,也許不是,但我不能傷害到這樣的伎倆。請注意,此查詢與前一個稍有不同。另一個沒有捕獲除> =,< =和NULL之外的語法,而這個語句將每個不是'< ='的語法退回到前向範圍。

+0

大聲笑我希望我問/我的同事這件事,他只幫我分手;但你的例子像一個冠軍!萬分感謝!!! – Th0raxe 2014-11-05 19:04:19