使用SQL Server查询语句选取前N行数据
创始人
2024-07-16 09:11:05
0

使用SQL Server查询语句可以实现多种查询,下面为您介绍的SQL Server查询语句可以实现选取前N行数据,希望对您能有所帮助。

在默认情况下,SQL Server将返回select语句所查询到的所有行。而使用可选的top选项可以指定返回的行数。

Top通常与order by 配合工作,order by可以控制哪些行应当排在前面,当然,没有order by子句top也可以正常工作,不过返回的没有排序的的结果集合中的前N行数据。

例如我们有下面这张表:

ID    Name    Age

1     aa       15

2     bb       20

3     cc       25

4     dd       30

5     ee       20

6     ff       20

要查找年龄最小的前3个人,写如下SQL Server查询语句:

SELECT TOP 3 *

FROM StuList

ORDER BY Age

返回结果集为:

1    aa    15

2    bb    20

5    ee    20

这个SQL Server查询语句看起来很清晰,结果也不错,但是很不幸,它是错误的,因为有3个记录的年龄都是20,要解决这个问题,可以使用with ties选项。

对于top关键词来说,with ties选项很重要,它可以在top返回的结果之后附加多个行,这些行与top返回的结果集***一行在order by子句指定的排序列上具有相同的值。

下面是修改后的代码:

SELECT TOP 3 WITH TIES *

FROM StuList

ORDER BY Age

返回结果集为:

1    aa    15

2    bb    20

5    ee    20

6    ff    20

对照表的内容我们发现,这样的返回结果就是正确的了。

在select语句中必须写名top应当返回的行数量或者百分比,不能使用变量或者表达式来替代top中的数字和百分比。

返回限定行数的另一种方法是对rowcount全局变量进行设置,要取消rowcount的限制作用,可以将它设置为0。

例如:

SET ROWCOUNT 3

SELECT *

FROM StuList

ORDER BY Age

这样也会返回3行结果,但是它没有with ties选项,所以仍然可能会生成不完整的结果。

注意:Top是Microsoft T-SQL 对ANSI SQL的扩展,是不可移植的。如果必须将数据库移植到另一个数据库平台,使用top就会带来转换上的麻烦。相反,rowcount变量是可以移植的。
 

 

 

【编辑推荐】

SQL Server连接错误的处理方法

SQL Server管理相关的注册表技巧

SQL Server服务器角色简介

SQL Server对象许可管理

全面解析SQL Server作业

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...