2013-08-12 2 views
0

목표는 간단합니다. 전체 행 수와 일부 데이터 페이지를 가져옵니다.OFFSET .. FETCH 문제가있는 총 행 수

내가 오프셋을

... 난에 누계 행 계산과 페이징을 구현하는 방법을 FETCH 문제 다음 우리는 몇 가지 큰 페이지 번호를 통과 할 때 (예를 들어, 우리는 단지 100 행이 있지만, 페이지 당 10 개의 레코드로 15 번째 요청) COUNT (*) OVER() 문은 결과 집합이 비어 있기 때문에 호출하지 않았습니다. 따라서 이 경우 총 행 수가이되지 않습니다.

큰 페이지 번호가 전달 된 경우에도 OFFSET ... FETCH 접근 방식을 사용하여 전체 행 수를 얻는 방법이 있습니까? 나는 대답은 "아니오"라고 생각

SELECT 
    ... 
    Total = COUNT(*) OVER() 
FROM Table1 
ORDER BY Col1 
    OFFSET (@PageNum-1) * @PageSize ROWS 
    FETCH NEXT @PageSize ROWS ONLY; 

답변

1

:

는 참고로, OFFSET ... 접근 방식을 FETCH하는 것입니다. 반환되는 각 행에 총 행 수를 추가합니다. 쿼리는 행을 반환하지 않으므로 합계를 넣을 위치가 없습니다.

그런데 나는 total이 계산되고 있다고 생각합니다. 그러나 아무 행도없이, 당신은 결코 그것을 보지 않는다.

편집 :

유일한 해결 방법 내가 생각할 수있는 응용 프로그램 계층이다. 어떤 행이 반환되지 않으면, 다음 실행

SELECT Total = COUNT(*) OVER() 
FROM Table1; 

당신은 실제로 총을 얻을 첫 번째 실행할 수 있습니다. 단점은 테이블이 실제로 테이블이 아니라 실행할 비용이 많이 드는 뷰일 때입니다.

+0

해결 방법을 제안 할 수 있습니까? –