2013-06-03 4 views
3

Je me demandais si vous pouviez faire une déclaration de cas dans la clause WHERE qui change l'opérateur.CAS O WH changement opérateur - TSQL

Ce que j'essaie de faire est de filtrer les résultats en fonction d'une valeur booléenne.

SELECT * 
FROM table1 
WHERE 
     CASE @Status 
      WHEN 1 THEN Name LIKE 'SOMETHING%' 
      WHEN 2 THEN Name NOT LIKE 'SOMETHING%' 
     END 

Je me demandais si c'était possible?

+1

duplication possible de [en utilisant CASE pour WHERE champ IN] (http://stackoverflow.com/questions/14114815/using-case-for-where-field-in) –

Répondre

13

Vous pouvez le faire sans, comme l'expression SWITCH ceci:

SELECT * 
FROM table1 
WHERE 
    (@Status = 1 AND Name LIKE 'SOMETHING%') 
OR (@Status = 2 AND Name NOT LIKE 'SOMETHING%') 

Depuis @Status peut être égale à une seule chose à la fois, une seule composante de l'expression OR déterminera l'issue de la WHERE condition.

+0

Incroyable, si simple, pourquoi n'ai-je pas pensé à cette! –

+0

Un peu de logique, je l'avais déjà utilisé plusieurs fois mais la logique était assez claire alors. –