SQL Server 2005 - 如果条件与联盟
问题描述:
我有一个SP具有以下算法。SQL Server 2005 - 如果条件与联盟
IF <SomeCondition>
BEGIN
SELECT * FROM TABLE1
END
ELSE
BEGIN
SELECT * FROM TABLE2
END
--Union the above with the query below
UNION
SELECT * FROM TABLE3
返回的记录集完全相同。我需要做一个结果集的联合和另一个查询。
有没有办法做到这一点,而不必使用临时表?
答
如何:
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的,这样做 - 可能会更便宜不消除重复
确保这三个表具有相同的结构。 – 2009-05-20 22:58:48