2011-12-14 23 views
2

どのようにしてTSQLクエリ結果のn番目の行を取得できますか?クエリ結果でn番目の行を取得するにはどうすればよいですか?

がさんは言ってみましょう、私はこのSELECTの2行目を取得したい:

SELECT * FROM table 
ORDER BY 2 ASC 
+0

テーブルの構造(列)は何ですか? SQL Server、Oracle、Sybase ASE、DB2のためのものですか? –

+0

それではSybase OO –

+0

ええ、それについて忘れました:/ – HackedByChinese

答えて

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; 
+0

ROW_NUMBER()rocks。 – MatBailie

1

あなたはMySQLのLIMITと同様の効果を達成するためにORDER BY ASC/DESCTOPを組み合わせたトリックを使用することができます。

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 

あなたが実際に持ちたいものまですべての行を最初に選択し、2番目の行であなたが望むものと全く同じ逆にを注文するときに残りの最初のものだけを選択してください。

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

+0

+1これはどこでも使えます! –

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 
関連する問題