Sql server 2008 SQL Server合并结果集

Sql server 2008 SQL Server合并结果集,sql-server-2008,multiple-resultsets,Sql Server 2008,Multiple Resultsets,我试图将两个不同查询的结果集合并到一个结果集中。在不使用存储过程(可能使用WITH关键字)的情况下,这是可能的吗 以以下情况为例: SELECT * FROM student WHERE graduation_year = 2013 -- returns 140 rows SELECT * FROM student WHERE graduation_year = 2014 -- returns 130 rows 请忽略在这里建议OR的明显解决方案,因为我省略了复杂的动态约束,也许只是为了说明我

我试图将两个不同查询的结果集合并到一个结果集中。在不使用存储过程(可能使用WITH关键字)的情况下,这是可能的吗

以以下情况为例:

SELECT * FROM student WHERE graduation_year = 2013 -- returns 140 rows
SELECT * FROM student WHERE graduation_year = 2014 -- returns 130 rows
请忽略在这里建议OR的明显解决方案,因为我省略了复杂的动态约束,也许只是为了说明我的观点


我想将每个查询的结果单独地,并将它们组合成一个结果集。

您可以在两个查询之间使用
联合所有

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
SELECT *, '2013' Source
FROM student 
WHERE graduation_year = 2013 
UNION ALL
SELECT *, '2014' Source
FROM student 
WHERE graduation_year = 2014 

如果需要标识行来自哪个数据集,我添加了一个名为source的字段,如果不需要,可以将其排除在外

如果您想在临时表中使用此选项,可以使用以下选项:

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

请参见

您可以使用
UNION ALL

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

有没有办法把这个结果命名为临时表,这样我就可以对它进行查询?@AdamLevitt-fyi:使用a可以让你命名结果并简单地使用它,而无需创建临时表。是的,我确实想这样做,但我想做两次,然后使用第三次合并前两次的结果。