2009-08-06 8 views
0

SQL Server 2005には、ページ番号付けを非常に簡単にするrow_number()という機能があります。SQL Server 2000で結果のサーバー側のページ付けを行うにはどうすればよいですか?

SELECT * FROM table WHERE row_number() between x and y 

SQL Server 2000で同じことを行うSQLサーバーの方法はありますか?

(注:私は、クエリのためのユニークな連番へのアクセスを持っていない、ROW_NUMBERの同義語となり、すなわち何かを())

答えて

2
SELECT * 
FROM (
     SELECT TOP (Y - X) * 
     FROM (
       SELECT TOP Y * 
       FROM mytable 
       ORDER BY 
         column 
       ) q 
     ORDER BY 
       column DESC 
     ) 
ORDER BY 
     column 
+0

オハイオ州オハイオ州 - それは良いです:o) –

0

これが最もエレガントなソリューションですが、あればわからないこと私がSQL 2000を使用したときに私のために働いた...

ストアドプロシージャを作成する場合は、一時テーブルを使用して実行できます。

自動的に増分するID列と結果セットと同じ列を持つ一時テーブルを作成します。

次に、結果セットからデータを選択し、この一時テーブルに正しい順序で挿入します。

最後に、ID列の値が行番号として機能する一時テーブルから結果を返します。

0

これにカーソルを使用することもできます。

DECLARE @i INT 
DECLARE C CURSOR FOR 
SELECT ... FROM ... ORDER BY ... 

OPEN C 
FETCH ABSOLUTE @StartRow FROM C 
SET @i = 1 
WHILE (@@FETCH_STATUS == 0) AND (@i < @EndRow - @StartRow) BEGIN 
    -- Do whatever you need 
    FETCH NEXT FROM C 
END 
CLOSE C 
DEALLOCATE C 

ここでの唯一の問題は、各行が個別の結果セットとして返されることがあるが、それは仕事をしていません。

関連する問題