2017-09-28 7 views
0

J'ai trouvé des tas de similaire questions que j'ai, mais je n'ai pas pu obtenir la réponse exacte!Comment appliquer un filtre utilisateur avec if condition dans la clause SQL where?

Je la condition suivante dans SQL where

declare @status int, @applyUserFilter bit, @user nvarchar(156) 

--following are values being set by UI 
set @activeStatus = 1 
set @applyUserFilter = 1 
set @user = 'xyzUser' 

--I want to filter the list by users only when @applyUserFilter flag is true otherwise it should return the list for all users 

--This is what i tried but gives syntax error 
WHERE ActiveStatus = @activeStatus 
     AND CASE WHEN @applyUserFilter = 1 THEN User = @user 

Note: Ceci montre que si le code de l'article!

+0

Utiliser '' CASE' dans un WHERE' déclarative vous oblige à définir un 'column' égal au résultat de la' CASE'. Ainsi, lorsque le scénario '@applyUserFilter = 1' est vrai, une colonne doit être définie sur 1 pour le filtrage. – Simon

+0

Je pense que ce que vous essayez d'atteindre est: 'User = CASE WHEN @applyUserFilter = 1 alors @user else null end' avec l'instruction' else' étant optionnelle. – Simon

+0

Merci! @Simon dans ce cas il ne retournera rien quand '@applyUserFilter = 0', dans ce cas je veux qu'il retourne la liste complète pour tous les utilisateurs – updev

Répondre

0

Qu'en est-:

WHERE [email protected] 
    AND (user IN (SELECT user from #users) AND @applyUserFilter=0 
    OR [email protected]) 
+0

Cela me donne seulement la liste pour l'utilisateur qui a toujours été passé! – updev

+0

travaillé pour moi;) http://sqlfiddle.com/#!6/67f3c/3/0 –