1

我想以分页格式返回搜索结果。但是,我似乎无法成功获得查询的前 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%'

任何帮助表示赞赏。

4

2 回答 2

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
于 2012-12-05T17:00:53.460 回答
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变量按顺序分配给所有行。您没有选择前 20 名中的任何一个。

于 2012-12-05T17:01:16.970 回答