2017-10-18 1 views
1

Je veux changer le filtre basé sur une valeur, le code ressemblerait à ceci si cela était une syntaxe valide:Filtrage d'une requête en utilisant une instruction case qui retourne une liste de valeurs possibles

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

Je veux pour sélectionner une valeur et le filtre change en fonction d'une expression. Lorsque l'expression est vraie, je veux sélectionner toutes les valeurs avec un ID de 1, 2 ou 3. Lorsque l'expression est false, je veux sélectionner toutes les valeurs avec un ID de 1 ou 2.

Ce n'est pas un simple = mais en sélectionnant dans une liste de valeurs, c'est pourquoi cela ne fonctionne pas. Comment cela est-il réalisable?

+1

peut vous montrer ce que votre '' est? –

Répondre

4

N'utilisez pas case. La simple logique suffit:

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

Dans ce cas, vous pouvez simplifier à:

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

Regardant moi dans le visage, merci. – TomNash