Sql server 选择后如何对N条记录中的前几条进行排序?
我在用冒险来练习。我想在Sql server 选择后如何对N条记录中的前几条进行排序?,sql-server,sql-order-by,adventureworks,Sql Server,Sql Order By,Adventureworks,我在用冒险来练习。我想在Person.Person表中选择FirstName列的前10个值,在获得这些值后,我想按升序对它们进行排序 当我尝试选择前10个值时,我得到的结果是: Syed Catherine Kim Kim Kim Hazem Sam Humberto Gustavo Pilar 我想将它们分类为: Catherine Gustavo Hazem Humberto Kim Kim Kim Pilar Sam Syed 这是我尝试过的,但失败了: select
Person.Person
表中选择FirstName
列的前10个值,在获得这些值后,我想按升序对它们进行排序
当我尝试选择前10个值时,我得到的结果是:
Syed
Catherine
Kim
Kim
Kim
Hazem
Sam
Humberto
Gustavo
Pilar
我想将它们分类为:
Catherine
Gustavo
Hazem
Humberto
Kim
Kim
Kim
Pilar
Sam
Syed
这是我尝试过的,但失败了:
select top 10 [FirstName] from Person.Person order by [FirstName];
及
及
当您不指定一个
ORDER BY
时,sql server将以任何方便的顺序返回值,但不能保证在后续执行时它会保持不变。因此,没有排序依据的TOP(x)
通常是没有意义的,因为这些x可以是任意x行
如果您真的想对这些随机的10行进行排序,您应该像以前一样使用子查询。您可以看到sql server可以自由选择它认为合适的任何顺序,因为您没有告诉它您想要什么
如果您真的想对这些行进行排序,可以尝试先将它们插入到临时表或表变量中。但是,我再次怀疑您会发现SQLServer将决定10个不同的行
可视化它(某种程度上)的一个好方法是查看执行计划:no
orderby
意味着nosort
,因此行是按照它们的顺序显示的(除此之外,事情有点神秘)。谢谢!它让我想到OOP语言(C#,Java…)中的引用类型
select * from
(select top 10 [FirstName] from Person.Person) as persons
order by [FirstName];
with persons as (select top 10 [FirstName] from Person.Person)
select * from persons order by [FirstName];