2017-01-11 32 views
0

我有一系列的工會聯合查詢。例如:如何控制聯合查詢中的執行順序?

SELECT 
    SUM(WHOS) [CRITERIA] 
FROM ONFIRST 

UNION 

SELECT 
    COUNT(WHATS) [CRITERIA] 
FROM ONSECOND 

UNION 

SELECT 
    IDONTKNOW [CRITERIA] 
FROM ONTHIRD 

查詢結果並不總是回來相同的順序,我希望結果是我寫的查詢相同的順序。

示例:有時我會首先獲得WHOS的SUM,有時我會先得到WHATS的COUNT。

完成此操作的最佳方法是什麼?

+1

'UNION'刪除重複這樣一個結果行可能來自所有的輸入。請更好地定義要求。 –

+0

沒有重複的值被刪除,每次運行查詢時,我都會得到相同數量的結果,但它們並不總是以相同的順序排列。我不確定我瞭解如何更好地定義要求。除了說我希望最高結果是我首先寫的查詢的結果而最低的結果是我最後寫的查詢。 – bteague

+1

所以聽起來像你需要'聯合所有'而不是'聯合'。 –

回答

1

您可以輕鬆地通過使用虛擬順序列由值來控制這一點,排序:

;With Cte As 
(
    Select Sum(WHOS) CRITERIA 
      , 1 As Ord 
    From ONFIRST 
    Union 
    Select Count(WHATS) CRITERIA 
      , 2 As Ord 
    From ONSECOND 
    Union 
    Select IDONTKNOW CRITERIA 
      , 3 As Ord 
    From ONTHIRD 
) 
Select CRITERIA 
From Cte 
Order By Ord Asc;