2012-12-13 195 views
1

我在尝试将两个不同查询的结果集合到一个结果集中。这可能是没有使用存储过程,也许使用WITH关键字?SQL Server组合结果集

看看下面的情况:

SELECT * FROM student WHERE graduation_year = 2013 -- returns 140 rows 
SELECT * FROM student WHERE graduation_year = 2014 -- returns 130 rows 

请忽略这意味着一个明显的溶液或这里我要离开了复杂的动态约束只是或许说明我的观点。

我想从这些查询中的每个查询结果个别并将它们合并为一个结果集。

回答

1

您可以使用两个查询之间的UNION ALL

SELECT *, '2013' Source 
FROM student 
WHERE graduation_year = 2013 
UNION ALL 
SELECT *, '2014' Source 
FROM student 
WHERE graduation_year = 2014 

SQL Fiddle with Demo

我添加了一个名为源,如果您需要确定哪些数据集的行来到现场从,这样可以如果不需要,则排除在外。

如果你想这个在一个临时表,可以用一些这样的:

select * 
into #temp 
from 
(
    SELECT *, '2013' Source 
    FROM student 
    WHERE graduation_year = 2013 
    UNION ALL 
    SELECT *, '2014' Source 
    FROM student 
    WHERE graduation_year = 2014 
) src 


select * from #temp 

SQL Fiddle with Demo

+0

有没有办法来命名这个结果作为一个临时表,所以我可以查询它? –

+0

@AdamLevitt请参阅我的编辑 – Taryn

+1

@AdamLevitt - fyi:使用[CTE](http://msdn.microsoft.com/en-us/library/ms190766(v = sql.105).aspx)将允许您命名结果并简要使用它,而不创建临时表。 – HABO

1
SELECT * FROM student WHERE graduation_year = 2013 -- returns 140 rows 
Union All -- Retrieves all results from both recordsets including both duplicates 
SELECT * FROM student WHERE graduation_year = 2014 -- returns 130 rows 

SELECT * FROM student WHERE graduation_year = 2013 -- returns 140 rows 
Union -- Retrieves all results from both recordsets discarding duplicates 
SELECT * FROM student WHERE graduation_year = 2014 -- returns 130 rows 
2

可以使用UNION ALL

SELECT * 
FROM student 
WHERE graduation_year = 2013 
UNION ALL 
SELECT * 
FROM student 
WHERE graduation_year = 2014