2016-06-01 35 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