중복을 포함 할 수있는 레코드를 선택 중이므로 고유 한 결과 세트를 페이지 매김 할 수 있어야합니다.SQL 총 행 수 (DENSE_RANK/DISTINCT)
순간, 나는 다음 (간체) 쿼리가 있습니다
SELECT pagiWrapper.* FROM (
SELECT DISTINCT alias.id
, alias.name
, DENSE_RANK() OVER (ORDER BY alias.name ASC) AS 'paginationRowNo'
, COUNT(*) OVER(PARTITION BY 1) AS 'paginationTotalRows'
FROM MyTable alias
LEFT JOIN MyTableTwo alias2 ON alias2.id = alias.id
WHERE (/* condition */)
) pagiWrapper WHERE pagiWrapper.paginationRowNo > 0 AND pagiWrapper.paginationRowNo <= 15
그러나 DISTINCT
올바르게 3을 반환,이 결과 세트에서 10 개 개의 레코드가 있으며, DENSE_RANK
가 올바르게 레이블을 1
, 2
하고, 3
내 문제는 paginationTotalRows
이 여전히 10 (원래 중복 포함) 결과 집합 개수를 반환합니다. paginationTotalRows
이 올바른 금액을 반환하도록 쿼리를 수정하려면 어떻게해야합니까? 상위 쿼리에서 MAX(paginationRowNo)
을 찾을
사용중인 SQL Server 버전은 무엇입니까? –
@Used_By_Already, 2005 – epoch
나는 이것을 위해 row_number()를 제안 해주십시오. –