我使用以下查询:
select 8 Union Select 0 Union Select 15
在列中填充这3个数字。我得到的结果是:
0
8
15
但是我希望8先来,然后是0然后是15,例如
8
0
15
我该怎么做?
答案 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