2016-06-01 36 views
0

我试图下面的查询合并之前,必须进行排序:结合两个查询的结果。利用工会

SELECT TOP 1 [DATE] FROM [database 1].[DBO].[table1] order by DATE desc; 

SELECT TOP 1 [DATE] FROM [database 2].[DBO].[table1] order by DATE desc; 

显然,在这样的UNION ALL会与order by条款相冲突。 最终,我需要在选择第一个条目之前对每个表进行排序。一旦条目被选中,我想将所有的排序条目合并成一个结果。

我该如何做到这一点?

+0

您可以在FROM子句中执行TOP查询(例如'SELECT [Date] FROM(SELECT TOP 1 [DATE] ....)T UNION ALL ....' – ZLK

回答

0

你可以做这样的事情。你基本上希望排序中最高的表具有最低的tblNumber。请注意,排序实际上是在union之后发生的,但只要tblNumbers正确,它就会达到完全相同的效果。

select * --if you don't want tblNumber returned, select all columns except tblNumber 
from 
(
    SELECT 1 as tblNumber 
    , [DATE] 
    FROM [database 1].[DBO].[table1] 
) tbl1 
union all 
(
    SELECT 2 as tblNumber 
    , [DATE] 
    FROM [database 2].[DBO].[table1] 
) tbl2 

order by tblNumber, [DATE] desc 
0

如何使用圆括号?嗯,其实有一个子查询:

SELECT tt.* 
FROM ((SELECT TOP 1 [DATE] 
     FROM [database 1].[DBO].[table1] 
     order by DATE desc 
    ) UNION ALL 
     (SELECT TOP 1 [DATE] 
     FROM [database 2].[DBO].[table1] 
     order by DATE desc 
    ) 
    ) tt; 

您可以添加额外的order by到外部查询,如果你喜欢。

+1

这就是它!我需要,非常感谢! – stephen