2017-09-28 71 views
0

我发现了一堆类似的questions,我有,但无法得到确切的答案!如何在SQL where条款中应用if条件的用户过滤器?

我有以下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 

注:这只能说明where子句代码!

+0

使用'CASE'在'WHERE'声明要求你设置一个'column'等于'CASE'的结果。所以当场景'@applyUserFilter = 1'为真时,需要将一列设置为等于1来进行过滤。 – Simon

+0

我想你想要实现的是:'User = CASE WHEN @applyUserFilter = 1 then @user else null end' else'else'语句是可选的。 – Simon

+0

谢谢! @Simon在这种情况下,当'@applyUserFilter = 0'时它不会返回任何东西,在这种情况下,我希望它返回所有用户的完整列表 – updev

回答

0

什么:

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

这给我只有总是传递的用户列表! – updev

+0

为我工作;)http://sqlfiddle.com/#!6/67f3c/3/0 –