【发布时间】:2016-11-23 23:04:32
【问题描述】:
我执行下面的查询并期望第一组然后第二组明显但是顺序是完全随机的。 我预期的结果:约翰、马克、戴夫、罗伯特、柯克
select *
from (
select Name
from (values ('john'),('mark'),('dave')) X(Name)
union
select Name
from (values ('robert'),('mark'),('kirk')) X(Name)
) q
这是一个替代查询,我希望它有有序(稳定)的结果,但我得到了相同的结果。 Union All 按照我的预期附加第二组,但稍后应用 Distinct 中断排序。
select Distinct Name
from (
select Name
from (values ('john'),('mark'),('dave')) X(Name)
union all
select Name
from (values ('robert'),('mark'),('kirk')) X(Name)
) q
什么是有序且不同的集合的解决方案?
【问题讨论】:
-
添加
order by。没有 order by,则无法保证 order by -
@Nick.McDermaid 这并不像看起来那么简单。我不想要有序的结果。我想要明显结合的结果。
-
使用
union而不是union all用于不同的集合。如果您想保留两套完整的顺序(即第一套在第二套之上),那么您首先需要确定是否存在重复,您希望从哪一套中取出? -
例如在您的第一个示例中,为什么从第二组而不是第一组中取出标记?规则是什么 - 规则是“总是从第二组中取出重复项”
-
使用排名函数并通过fiist中的行数添加到较低的集合中......或任何有效的tp强制执行顺序。您甚至可以考虑使用持久密钥,但我敢说我们首先缺少导致订单的要求。
标签: sql-server tsql sql-server-2016