1

我正在使用以下查询:

select 8 Union Select 0 Union Select 15 

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

0  
8  
15

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

8  
0  
15

我该怎么做呢?

4

2 回答 2

3

使用 UNION ALL 例如

select 8 UNION ALL Select 0 UNION ALL Select 15 
于 2012-12-19T15:59:02.207 回答
2

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

UNION操作员删除重复项,而将UNION ALL保留它们(以及它们的顺序,如@SimonMartin 的回答中所述)。

如果您想将UNION运算符的功能与 提供的排序功能相结合UNION ALL,那么您需要先UNION ALL自己过滤掉重复值:

-- 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
于 2012-12-19T17:05:54.377 回答