繁体   English   中英

Sql Server 联合与 If 条件

[英]Sql Server union with If condition

我有一个查询,如:

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 条件下使用它?

谢谢,
约翰

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

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

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

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

在 Query 中放置条件的最佳方法是 CASE 语句。 您可以在 query 中放置任意数量的条件。 CASE 语句用于在 Query 中放置条件过滤器。

对于 EX。

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

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

这是通过完全摆脱 UNION 来简化代码的方法。 在可能的情况下,我总是更喜欢更简单的解决方案。 如果 select 执行表扫描,这也会表现得更好,因为它只会扫描一次而不是(可能)两次。

DECLARE @tmpValue

SET @tmpValue = 0 -- it will be change

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM