如何获取SQL Server表中的第n行?

Kip*_*gen 19 sql sql-server

如何从SQL Server中的查询结果中获取第n行(即第5行)?

Jos*_*rke 21

SQL Server 2005及更新版本:

with Records AS(select row_number() over(order by datecreated) as 'row', * 
                from Table)
select * from records
where row=5
Run Code Online (Sandbox Code Playgroud)

您可以更改顺序,以确定如何对数据进行排序以获取第五行.

在我本地安装上测试:Microsoft SQL Server 2005 - 9.00.4053.00(X64)2009年5月26日14:13:01版权所有(c)1988-2005 Microsoft Corporation Developer Edition(64位)在Windows NT 6.1上(Build 7600:)

  • 在我正在运行的SQL 2005上没有正常工作 (2认同)

Pau*_*lor 10

截至2005年,ROW_NUMBER()函数可用.

SELECT * FROM
(
   SELECT r.*, ROW_NUMBER() OVER (ORDER BY SomeField ASC) AS RowNum
) sorty
WHERE RowNum = 5
Run Code Online (Sandbox Code Playgroud)


mwi*_*ahl 8

根据此链接,您有很多选择.所有这些技术都适用于SQL 2000.我之前使用过的是选项#1,你可以选择一个方向排序的5个元素的子集,然后选择另一个方式排序的子集中的"TOP"行.效果很好!

SELECT TOP 1 FName 
FROM 
( 
    SELECT TOP 5 FName 
    FROM Names 
    ORDER BY FName 
) sub 
ORDER BY FName DESC 
Run Code Online (Sandbox Code Playgroud)

在SQL 2005及更高版本中它更容易 - 您有行排序函数,如ROW_NUMBER(),它将直接执行您所需的操作.

  • SQL Server 2005中存在ROW_NUMBER()... (4认同)
  • 请注意,当使用此方法并且有 n < 5 行时,您将获得第 n 行而不是一无所有。例如,如果 Names 中有 4 行,那么这将返回第 4 行。这可能是好是坏,这取决于您的期望。 (2认同)