【问题标题】:T-SQL CASE in WHERE Clause and IN operatorWHERE 子句和 IN 运算符中的 T-SQL CASE
【发布时间】:2016-01-18 16:32:21
【问题描述】:

我尝试在有 where 子句的地方执行此查询。问题是我需要在WHERE 条件内使用运算符IN

谁能帮帮我?

这里是查询。谢谢。

DECLARE @title As Varchar(10)

SELECT * FROM EMPLOYEE
WHERE Title IN( CASE @title WHEN 'All' THEN  'FSOT','FSO','FISO','SFSO','PB','SPB' ELSE @title END)

【问题讨论】:

  • 所以如果@title = All 那么你需要传递一个列表,否则只需@title?
  • @Title 来自一个变量。例如,在 UI 中有 DropDownList(All、FSOT、FSO、FISO 等),如果我选择“All”,则 @Title='All' 并通过上面的标题列表,如果列表之一不是“All” ' 选择所以@Title='选择的标题'。 TQ。

标签: sql tsql


【解决方案1】:

不需要case表达式,使用布尔逻辑即可:

SELECT *
FROM EMPLOYEE
WHERE (@title = 'All'
      AND title IN ('FSOT', 'FSO', 'FISO', 'SFSO', 'PB', 'SPB')
      )
  OR (@title <> 'All'
      AND title = @title
      )

【讨论】:

    【解决方案2】:

    您可以使用逻辑 or 运算符实现此行为:

    SELECT * 
    FROM   employee
    WHERE  (@title = 'All' AND Title IN ('FSOT', 'FSO', 'FISO', 'SFSO', 'PB', 'SPB')) OR
           (@title != 'All' AND Title = @title)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多