选择Union SQL

时间:2012-12-19 15:55:34

标签: sql select union

我使用以下查询:

select 8 Union Select 0 Union Select 15 

在列中填充这3个数字。我得到的结果是:

0  
8  
15

但是我希望8先来,然后是0然后是15,例如

8  
0  
15

我该怎么做?

2 个答案:

答案 0 :(得分:3)

使用UNION ALL E.g。

select 8 UNION ALL Select 0 UNION ALL Select 15 

答案 1 :(得分:2)

@ SimonMartin的答案适用于您提供的确切数据集,但请注意,如果您的数据集包含重复值,UNION ALL将产生与UNION不同的结果。

UNION运算符会删除重复项,而UNION ALL会保留它们(以及它们的顺序,如@ SimonMartin的答案中所述)。

如果您想将UNION运算符的功能与UNION ALL提供的排序功能结合起来,那么您需要从UNION ALL开始,然后自行过滤掉重复的值:< / p>

-- baseline query + 1 duplicate record at the end
with query as 
(
    select 8 as Val
        UNION ALL 
    Select 0 as Val
        UNION ALL 
    Select 15 as Val
        UNION ALL 
    Select 0 as Val
)
-- now add row numbers
, queryWithRowNumbers as 
(
    select row_number() over (order by (select 0)) as rn, Val
    from query
)
-- finally, get rid of the duplicates
select Val from (
    select Val, min(rn) as minRn
    from querywithrownumbers
    group by val
) q
order by minRn

这将给出

的结果
8
0
15

而如果你只使用UNION ALL,你最终会得到

8
0
15
0