2017-01-11 35 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;