SQL Server 2005 - 如果条件与union

时间:2009-05-20 22:31:51

标签: sql sql-server sql-server-2005

我有一个具有以下算法的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和另一个查询。

有没有办法在不使用临时表的情况下执行此操作?

3 个答案:

答案 0 :(得分:8)

怎么样:

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

答案 1 :(得分:3)

如果您不介意它未编译,您也可以使用动态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)

答案 2 :(得分:0)

此外,如果您可以使用UNION ALL代替UNION,那么这样做 - 可能会更便宜,不能消除重复