2012-12-05 110 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名。