如何在查询结果中获得第n行?

时间:2011-12-14 14:20:09

标签: sql tsql

如何获取SQL查询结果的第n行?

让我们说,我想得到这个SELECT的第二行:

SELECT * FROM table
ORDER BY 2 ASC

3 个答案:

答案 0 :(得分:6)

您定位的SQL Server版本是什么?如果是2005或更高版本,您可以使用ROW_NUMBER生成行号并使用该号码进行选择。 http://msdn.microsoft.com/en-us/library/ms186734.aspx

WITH orderedtable AS
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY <your order here>) AS 'RowNumber'
    FROM table
) 
SELECT * 
FROM orderedtable 
WHERE RowNumber = 2;

答案 1 :(得分:1)

您可以使用TOPORDER BY ASC / DESC相结合的技巧来实现类似于MySQL LIMIT的效果:

SELECT TOP 2 * INTO #temptable FROM table
ORDER BY 2 ASC

SELECT TOP 1 * FROM #temptable
ORDER BY 2 DESC

或没有temptable,但嵌套语句:

SELECT TOP 1 * FROM
(
    SELECT TOP 2 * FROM table
    ORDER BY 2 ASC
) sub
ORDER BY 2 DESC

第一次选择所有行,直到您想要实际拥有的行,而在第二个查询中,您只选择其中的第一个反向,这正是一个你想要的。

来源:http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=850&lngWId=5

答案 2 :(得分:0)

单向;

;with T(rownumber, col1, colN) as (
    select 
         row_number() over (order by ACOLUMN) as rownumber,
         col1,
         colN
    from 
         atable
)
select * from T where rownumber = 2