我使用下面的查询:选择联盟SQL
select 8 Union Select 0 Union Select 15
填充一列中的这3个号。我得到的结果是:
0
8
15
但我希望8来先,然后0然后15,例如,
8
0
15
我该怎么做?
我使用下面的查询:选择联盟SQL
select 8 Union Select 0 Union Select 15
填充一列中的这3个号。我得到的结果是:
0
8
15
但我希望8来先,然后0然后15,例如,
8
0
15
我该怎么做?
使用UNION ALL E.g.
select 8 UNION ALL Select 0 UNION ALL Select 15
感谢您的快速响应。你的建议解决了。 – Kumar
高兴得到了帮助。如果我已经回答了你的问题,你能否将其标记为答案 - 应该有个勾号来表明这一点。这将帮助任何发现你的问题的人知道哪些答案可以解决问题。 –
@ SimonMartin的答案适用于精确的数据集,你给,但是要注意,如果您的数据集包含重复的值,该UNION ALL
会产生不同的结果比UNION
。
UNION
运算符删除重复项,而UNION ALL
将保留它们(以及它们的顺序,如@ SimonMartin的答案中所述)。
如果你要的功能与UNION ALL
提供的排序功能,结合你UNION
运营商,那么你就需要开始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
为什么要按特定顺序排列这些?其余的SQL在查询它们被放置的表时不会考虑它们的排序。哎呀,我甚至不会依赖插入顺序和一个自动生成的键来完全符合您的期望(因为如果系统可以使插入并行,你可以任意排列窗口)。如果你绝对需要它们,你可能更愿意添加一个“排序”列。 –