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