[英]SQL Server 2005 - If condition with union
我有一个具有以下算法的SP。
IF <SomeCondition>
BEGIN
SELECT * FROM TABLE1
END
ELSE
BEGIN
SELECT * FROM TABLE2
END
--Union the above with the query below
UNION
SELECT * FROM TABLE3
返回的记录集完全相同。 我需要做一个结果集的UNION和另一个查询。
有没有办法在不使用临时表的情况下执行此操作?
怎么样:
SELECT * FROM TABLE1 WHERE <SomeCondition>
UNION
SELECT * FROM TABLE2 WHERE NOT <SomeCondition>
UNION
SELECT * FROM TABLE3
如果您担心两次评估:
DECLARE @condition bit
SET @condition = CASE WHEN <SomeCondition> THEN 1 ELSE 0 END
SELECT * FROM TABLE1 WHERE @condition = 1
UNION
SELECT * FROM TABLE2 WHERE @condition = 0
UNION
SELECT * FROM TABLE3
如果您不介意它未编译,您也可以使用动态SQL。 例如:
DECLARE @sql VARCHAR(100)
DECLARE @table VARCHAR(10)
IF <SomeCondition>
BEGIN
SET @table = 'Table1'
END
ELSE
BEGIN
SET @table = 'Table2'
END
SET @sql = 'SELECT * FROM ' + @table + ' UNION SELECT * FROM TABLE3'
EXEC(@sql)
此外,如果您可以使用UNION ALL而不是UNION,那么这样做 - 可能更便宜,不能消除重复
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.