0

重複の可能性:
SQL Server の LIMIT と OFFSET に相当しますか?

私は現在 2500 行を含むテーブルに取り組んでおり、将来的にはさらに多くなるでしょう。

jqgrid を使用して、データベースからレコードを表示しています。

グリッドがロードされるたびにtop 500、データベースから行を取得しています。ただし、グリッドでページネーションの使用を開始すると、レコードの数が追加されます。

例 : 最初の行数は でTOP 100、次のページに進むと、クエリで に増加しTOP 200ます。

グリッドに基づいて上位 n 行を取得するのではなく、行を制限できるように、この問題を回避するソリューションが必要です。範囲またはLIMIT

グリッドの次のページに移動するときに、行の代わりにTOP 200101 から 200 までの行を取得したい

 select top 500
        exe.id,
        bat.BName,
        bat.tid,
        bat.freq,
        exe.status,
        exe.Msg,
        exe.time,
        exe.Fi
    from
       XXX exe,
        YYY bat 
    where
        exe.id=bat.id   
    order by     
        CONVERT(VARCHAR(10),
        exe.time,
        120) DESC,
        exe.status,
        exe.id DESC

私はjQGridを初めて使用し、このDB関連のものを処理する方法をあまり知らないので、これについて教えてください

Stackoverflowのリンクもいくつか参照しましたが、理解できません

前もって感謝します

4

1 に答える 1

5

を使用できます。データをクエリするまで割り当てられないためROW_NUMBER()、値でrow_number()データを取得する場合は、句で使用する値を取得するために、または副選択をrow_number()使用する必要があります。CTEWHERE

SELECT *
FROM
(
  select  exe.id,
        bat.BName,
        bat.tid,
        bat.freq,
        exe.status,
        exe.Msg,
        exe.time,
        exe.Fi,
        row_number() over(order by CONVERT(VARCHAR(10), exe.time, 120) DESC,
                   exe.status, exe.id DESC) rn
  from XXX exe,
       YYY bat 
  where exe.id=bat.id  
) x
WHERE rn between 101 and 200

JOINまた、 ANSI構文を使用するように構文を変更することをお勧めします。

SELECT *
FROM
(
  select  exe.id,
        bat.BName,
        bat.tid,
        bat.freq,
        exe.status,
        exe.Msg,
        exe.time,
        exe.File,
        row_number() over(order by CONVERT(VARCHAR(10), exe.time, 120) DESC,
                   exe.status, exe.id DESC) rn
  from XXXexe
  INNER JOIN  YYY bat 
     ON exe.id=bat.id  
) x
WHERE rn between 101 and 200
于 2012-08-23T11:04:02.680 に答える