2012-12-05 3 views
1

검색 결과를 페이지 매김 형식으로 반환하고 싶습니다. 그러나 나는 성공적으로 내 쿼리의 첫 10 결과를 얻을 수 없습니다.SQL로 페이지 매기기 ROW_NUMBER

문제는 'RowNum'은 405, 687, 1024 등으로 반환됩니다. 1,2,3,4,5 등으로 번호가 다시 매겨지기를 원합니다. 따라서 행 1과 20 사이를 지정할 때 나는 처음 20 개의 검색 결과를 얻는다. 나는 결과

많이 여기에 SQL의 수

AND RowNum < 20000 

: 숫자가 크기 때문에에 내가 ROWNUM 조건을 변경하는 경우 대신, 나는 1

(10) 사이에 결과를 얻을

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

는 vairable rownum 모든 행에 할당 순차적으로되고 있습니다. 당신은 정상 20에서 무엇이든 선택하고 있지 않다.