滑稽。今天一個同事的問題完全一樣。你是他嗎? :)
在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之外的語法,而這個語句將每個不是'< ='的語法退回到前向範圍。
在你的問題中沒有PL/SQL – 2014-11-05 18:21:49
解釋一些你想做什麼,只是用代碼我不知道如何幫助你。如果有幫助,請查看PL-SQL中的CASE語句:http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/case_statement.htm – 2014-11-05 18:26:40
你想達到什麼目的?這個查詢應該做什麼? – Mureinik 2014-11-05 18:27:38