WHERE使用CASE过滤不同的值

时间:2014-03-17 19:06:41

标签: sql tsql sql-server-2012

这似乎是一个受欢迎的场景,但我似乎无法从之前关于该主题的答案中实现解决方案。

我需要在SQL Server 2012中执行类似的操作:

DECLARE @conditionVarChar AS VARCHAR(MAX) = 'Use ham'
DECLARE @food AS VARCHAR(MAX) = 'ham'
DECLARE @somethingElse VARCHAR(MAX) = 'somethingelse'

SELECT *
FROM tempTable
--Here is my issue
WHERE CASE WHEN @conditionVarChar LIKE '%ham%' --If there is 'ham' in this varchar
           THEN @food = tempTable.Food --Then filter from this
           ELSE @somethingElse = tempTable.SomethingElse --Else, filter on something completely different
           END

由于

1 个答案:

答案 0 :(得分:4)

您真的不需要CASE语句来执行此操作,您只需过滤一组条件并使用OR

WHERE (@conditionVarChar LIKE '%ham%' AND @food = tempTable.Food)
  OR  (@somethingElse = tempTable.SomethingElse)

根据实际标准,使用动态SQL构建标准列表可能更实际。