2011-12-14 68 views
2

如何獲得TSQL查詢結果的第n行?如何獲取查詢結果中的第n行?

比方說,我希望得到這個SELECT的第二行:

SELECT * FROM table 
ORDER BY 2 ASC 
+0

表格(列)的結構是什麼?它適用於SQL Server,Oracle,Sybase ASE,DB2? – 2011-12-14 14:24:51

+0

因此,Sybase oO – 2011-12-14 14:28:04

+0

是的,忘記了那個:/ – HackedByChinese 2011-12-14 14:28:30

回答

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

您可以使用一個技巧結合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

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