Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有If条件的Sql Server联合_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

具有If条件的Sql Server联合

具有If条件的Sql Server联合,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个类似这样的问题: DECLARE @tmpValue SET @tmpValue = 0 -- it will be change SELECT * FROM Animal WHERE AniActive = 1 UNION IF @tmpValue > 0 SELECT * FROM Animal WHERE.Active = 0 当我这样使用它时,它会因为if条件而给出错误。由于我们的结构,我不得不使用UNION 如何在if条件下使用它 谢谢, John将条件@tmp

我有一个类似这样的问题:

DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change 

SELECT * FROM Animal WHERE AniActive = 1
UNION 
IF @tmpValue > 0 
SELECT * FROM Animal WHERE.Active = 0
当我这样使用它时,它会因为if条件而给出错误。由于我们的结构,我不得不使用UNION

如何在if条件下使用它

谢谢,

John

将条件
@tmpValue>0
移动到
WHERE
子句,如下所示:

SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal WHERE @tmpValue > 0 AND Active = 0

您可以像这样将条件添加到查询中。如果您的测试条件为false,union的部分将不返回任何结果:

DECLARE @tmpValue

SET @tmpValue = 0 -- it will be change 

SELECT * FROM Animal WHERE AniActive = 1
UNION 
SELECT * FROM Animal WHERE.Active = 0 and @tmpValue > 0

在查询中放置条件的最佳方法是CASE语句。你可以设置任意数量的条件 在查询中。CASE语句用于在查询中放置条件筛选器

例如

DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change 

SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal 
WHERE 
1 = CASE WHEN @tmpValue  = 0 THEN 0 ELSE Active = 1 END

您的情况并不复杂,但对于更复杂的条件,可以在查询中使用嵌套的CASE语句

这里有一种方法可以通过完全取消联合简化代码。如果可能的话,我总是喜欢一个更简单的解决方案。如果select执行表扫描,这也会执行得更好,因为它只扫描一次而不是(可能)两次

DECLARE @tmpValue

SET @tmpValue = 0 -- it will be change

SELECT * FROM Animal WHERE AniActive = 1 OR @tmpValue > 0