1

ページネーションを実装するクエリを作成しようとしています。私の基本的な要件は、返される行の最小範囲と最大範囲を指定できるクエリが必要であることです。などなど。

いくつかのヘルプフォームインターネットを通じて、ここSOで次のクエリを書き留めましたが、実際にはそのように機能しておらず、範囲が何であれ行の大きな合計を返します(おそらくクエリに結合がありません)

SELECT b.id,b.title,b.name
FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY (select NULL as noorder)) AS RowNum, * 
    FROM [student] b
) as alias,[student] b,[class] c
WHERE b.[status]=1 
AND c.id=b.class 
AND c.name='Science' 
AND RowNum BETWEEN 1 AND 5
ORDER BY b.dtetme DESC

修正中に迷子になりました。誰か間違いを指摘してください。ありがとうございました!

4

3 に答える 3

1

クエリ ロジック全体 +ROW_NUMBERをサブクエリに入れる必要があります。WHEREページングのためだけにアウターを使用します。

ROW_NUMBERORDER BYページングを実装する必要があります。

SELECT  a.id ,
        a.title ,
        a.name
FROM    
   ( 
        SELECT ROW_NUMBER() OVER (ORDER BY b.dtetme DESC) AS RowNum, b.*
        FROM  [student] b 
        INNER JOIN [class] c ON  c.id = b.class
        WHERE b.[status] = 1
        AND c.name = 'Science'
    ) a
WHERE RowNum BETWEEN 1 AND 10 -- change numbers here for pages
ORDER BY t.RowNum
于 2013-06-27T12:48:20.553 に答える
1

の追加に問題があると思います。結合をサブクエリに移動してみてください[student] bFROM

SELECT a.id, a.title, a.name
FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY (select NULL as noorder)) AS RowNum, * 
    FROM [student] b
    JOIN [class] c ON c.id = b.class
    WHERE b.[status]=1 
    AND c.name='Science' 
) as a
WHERE a.RowNum BETWEEN 1 AND 5
ORDER BY a.dtetme DESC

また、範囲を変更できるように、これをプロシージャまたは関数でラップすることを検討することもできます。

于 2013-06-27T12:48:53.863 に答える
0

次のようなものが欲しいようです:

SELECT t.id,t.title,t.name FROM (
    SELECT s.id,s.title,s.name, RowNum = ROW_NUMBER() OVER(ORDER BY s.dtetme DESC)
    FROM student s
    INNER JOIN class c ON c.id = s.class
    WHERE s.[status]=1 AND c.name='Science' ) AS t
WHERE t.RowNum BETWEEN 1 AND 5
ORDER BY t.RowNum
于 2013-06-27T12:50:24.850 に答える