【问题标题】:How to apply user filter with if condition in SQL where clause?如何在 SQL where 子句中应用带有 if 条件的用户过滤器?
【发布时间】:2018-03-10 12:26:31
【问题描述】:

我找到了一堆类似的questions,但无法得到确切的答案!

我在 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 子句代码!

【问题讨论】:

  • WHERE 声明中使用CASE 要求您将column 设置为等于CASE 的结果。所以当场景@applyUserFilter = 1为真时,需要设置一列等于1进行过滤。
  • 我认为你想要实现的是:User = CASE WHEN @applyUserFilter = 1 then @user else null end else 语句是可选的。
  • 谢谢! @Simon 在这种情况下,当'@applyUserFilter = 0'时它不会返回任何内容,在这种情况下,我希望它返回所有用户的完整列表
  • 这个问题是关于 MySQL 的吗?这看起来不像 MySQL。

标签: mysql sql sql-server stored-procedures where-clause


【解决方案1】:

怎么样:

    WHERE activeStatus=@activeStatus
    AND (user IN (SELECT user from #users) AND @applyUserFilter=0
    OR user=@user)

【讨论】:

  • 这只给了我总是通过的用户的列表!
猜你喜欢
  • 2023-03-27
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2016-07-02
  • 2010-12-30
相关资源
最近更新 更多