Sql 其中,使用案例筛选不同的值

Sql 其中,使用案例筛选不同的值,sql,tsql,sql-server-2012,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

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

我需要在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

谢谢

您实际上不需要使用
案例
语句来执行此操作,您可以根据一组条件进行筛选,然后使用

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

根据实际条件,使用动态sql来构建条件列表可能更为实际。

您实际上不需要使用
CASE
语句来实现这一点,您只需对条件集进行筛选,然后使用

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

根据实际条件,使用动态sql来构建条件列表可能更为实际。

真正的动态sql是实现这一点的最佳方法……如果只是几个项目,您可以始终作为if/THEN来完成。。。例如,如果它的HAM然后选择*FROM tentable where food=HAM等。不确定我是否理解你的评论,但我需要从同一个表中选择,不管怎样……我只需要两个完全不同的where子句,取决于@conditionVarChar contains所说的,如果存在多个“条件”然后可以使用动态sql来实现这一点。如果你只是简单的ham或其他东西,那么简单的If-then是一种更简单的方法。动态SQL背后的思想是声明一个变量,然后将文本设置为SQL语句。然后执行该SQL语句。您可以通过向声明的变量添加文本来动态构建它。如果你需要帮助,请告诉我。真正的动态SQL是最好的方法…如果它只是一些项目,你可以作为if/THEN来做。。。例如,如果它的HAM然后选择*FROM tentable where food=HAM等。不确定我是否理解你的评论,但我需要从同一个表中选择,不管怎样……我只需要两个完全不同的where子句,取决于@conditionVarChar contains所说的,如果存在多个“条件”然后可以使用动态sql来实现这一点。如果你只是简单的ham或其他东西,那么简单的If-then是一种更简单的方法。动态SQL背后的思想是声明一个变量,然后将文本设置为SQL语句。然后执行该SQL语句。您可以通过向声明的变量添加文本来动态构建它。如果你需要帮助,请告诉我。