2012-12-05 109 views
1

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

问题是'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

您需要在子查询中应用WHERE。我会用一个CTE来代替(假设SQL服务器)::

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 
+0

辉煌,我已经坚持了几个小时,谢谢一堆! –

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名。