2017-10-18 75 views
1

我想改變基於值的過濾器列表的case語句過濾查詢,代碼應該是這樣的,如果這是有效的語法:使用返回可能值

SELECT 
    Value 
FROM 
    Table 
WHERE 
    ID IN (CASE WHEN <expression> THEN (1,2,3) ELSE (1,2) END) 

所以我想選擇一個值,並且過濾器根據某個表達式進行更改。當表達式爲真時,我想選擇ID爲1,2或3的所有值。當表達式爲假時,我想選擇ID爲1或2的所有值。

它不是一個簡單的=,但從值列表中選擇,這是它不起作用的原因。這是如何實現的?

+1

你能證明你的''是什麼? –

回答

4

請勿使用case。簡單的邏輯就足夠了:

WHERE (<expression> and ID IN (1, 2, 3)) or 
     (not <expression> and ID IN (1, 2)) 

在這種情況下,您可以簡化這:

where id in (1, 2) or 
     (id = 3 and <expression>) 
+0

盯着我,謝謝。 – TomNash