【发布时间】:2012-01-20 07:34:10
【问题描述】:
如何获取 TSQL 查询结果的第 n 行?
假设,我想获取此 SELECT 的第二行:
SELECT * FROM table
ORDER BY 2 ASC
【问题讨论】:
-
你的表(列)的结构是什么?它适用于 SQL Server、Oracle、Sybase ASE、DB2 吗?
如何获取 TSQL 查询结果的第 n 行?
假设,我想获取此 SELECT 的第二行:
SELECT * FROM table
ORDER BY 2 ASC
【问题讨论】:
您的目标是什么版本的 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;
【讨论】:
你可以使用TOP与ORDER 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
或者没有可试探的,但有嵌套的语句:
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
【讨论】:
一种方式;
;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
【讨论】: