使用SQL ROW_NUMBER进行分页

时间:2012-12-05 16:57:00

标签: sql

我想以分页格式返回搜索结果。但是,我似乎无法成功获得查询的前10个结果。

问题是返回的'RowNum'类似于405,687,1024等。我希望它们重新编号为1,2,3,4,5等,这样当我在第1行和第20行之间指定时获得前20个搜索结果。相反,因为数字较大,我在1和10之间没有得到结果。

如果我将RowNum条件更改为:

AND RowNum < 20000

我得到了很多结果

这是sql:

                SELECT  *
            FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY DocumentID ) AS RowNum, *
                      FROM      Table
                    ) AS RowConstrainedResult
            WHERE   RowNum >= 1
                AND RowNum < 20
                                AND Title LIKE '%diabetes%'
                                AND Title LIKE '%risk%'

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:2)

您需要在子查询中应用WHERE。我会使用CTE(假设SQL-Server)::

WITH CTE AS
(
  SELECT  T.*, 
     ROW_NUMBER() OVER ( ORDER BY DocumentID ) AS RowNum
  FROM Table T
  WHERE Title LIKE '%diabetes%' AND Title LIKE '%risk%'
)
SELECT * FROM CTE 
WHERE RowNum >= 1 AND RowNum < 20

答案 1 :(得分:0)

您需要将where条件移动到子查询中:

       SELECT  *
        FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY DocumentID ) AS RowNum, *
                  FROM      Table
                  where  Title LIKE '%diabetes%'
                            AND Title LIKE '%risk%'
                ) AS RowConstrainedResult
        WHERE   RowNum >= 1 AND RowNum < 20

rownum vairable正在顺序分配给所有行。你没有在前20名中选择任何一个。