2009-08-04 15 views
2

Oracleでは、通常このようにページングを問い合せます。一時テーブルを作成せずにSybaseでページングを実行するにはどうすればよいですか? (oracle rownumの問題)

SELECT * FROM (SELECT *, rownum rid FROM TABLEA WHERE rownum <= #pageend#) 
WHERE rid > #pagestart# 

ただし、Sybase DBMSには「rownum」機能はありません。

Sybaseでどのようにこのクエリを正確に行うことができますか?

いくつかの方法が見つかりました。

  1. 用いる "行数"

    セットの行数10

    SELECT * FROM TABLEAから

  2. 使用アイデンティティ(作る一時テーブル)

    SELECT *、ROWNUM = IDENTITY(8 )INTO #TEMP FROM TABLEA

    SELECT * FROM #TEMP WHER E ROWNUM <#のpageend#とROWNUM> =#pagestart#

    DROP TABLE #TEMP

は、これらは私が欲しいものではありません。

セッションレベルでrowcountが設定されているため、テンポラリテーブルを作成したくありません。

答えて

0

あなたがテーブルの上にユニークなID列を持っている場合は、SELECT TOPを使用することができ、N

SELECT TOP 10 * 
FROM tableA 
WHERE id BETWEEN @start AND @end 
+1

これは良い考えですか? id列が1から始まることをどのように知ることができますか?そしてそれに穴がない?私はこれが答えではないと思う。 –

3

これは、あなたが「select * where id_column in (ids from query below)

のような選択でそれらを使用することができますあなたのすべての IDSを与えます
select top 10 id_column from trade 
where @whereClause 
and id_column > 0 //keep replacing this with the max id from the result set 
order by id_column 
+0

バム、愚かな単純なので、私はそれを逃した。ありがとう! – CrazyBS

関連する問題