组合两个保存的查询SQL Server

时间:2015-09-02 17:15:21

标签: sql sql-server

我在SQL Server中有很多单独的查询,我希望通过主查询来组合。

我想做这样的事情:

SELECT * FROM Query1

UNION ALL

SELECT * FROM Query2

UNION ALL

SELECT * FROM Query3

这看起来很基本,但我找不到从另一个查询引用查询的语法。在创建子查询等方面似乎有无穷无尽的资源,但将所有查询组合成1个主查询将会非常混乱且无法使用。有没有办法以我尝试的方式执行此操作 - 或者我是否必须将所有内容重写为一个巨大的查询?

3 个答案:

答案 0 :(得分:0)

这样做没有问题。您只需检查所有子列查询返回的列是否相同。这是一个例子。

    select * 
    from (select * from sys.dm_os_loaded_modules where description like '%WINRT%') as Q1 
    UNION ALL
    select * 
    from (select * from sys.dm_os_loaded_modules where description like '%RUNTIME%') as Q2

答案 1 :(得分:0)

你的问题有点不清楚,但我会专注于这一行:

  

但是我找不到从另一个查询引用查询的语法。

我所知道的最接近这种事情的是CTE:

WITH cte1 AS (
  paste query 1 here
), 
cte2 AS (
  paste query 2 here
), 
cte 3 AS (
  paste query 3 here
)
SELECT * FROM cte1
UNION ALL 
SELECT * FROM cte2
UNION ALL 
SELECT * FROM cte3

另一种方法并非真正引用来自查询的查询",但可能是您想要的,可能是创建临时表或表变量,并插入每个行的行一次一个地查询它。那么你的主要查询"将从临时表/变量中选择所有行。

答案 2 :(得分:0)

以下是我如何理解的方法:

SELECT Query1.Stuff, Query1.MoreStuff, Query2.Stuff, Query3.Stuff

FROM (
Query1 SQL
) AS Query1

JOIN

(
Query2 SQL

) AS Query2

on Query1.key = Query2.key

JOIN

(
Query3 SQL
) AS Query3

on Query2.key = Query3.key