Eu tenho que aplicar paginação na consulta conforme o requisito, preciso de duas colunas extras além do resultado da consulta
1. Total de registros
2. Total de páginas
mas estou tentando confirmar que este é o caminho certo para recuperar o número total de páginas
CASE WHEN TotalRec%@PageSize > 0 THEN TotalRec/@PageSize) +1 ELSE TotalRec/@PageSize) END TotalPage
WITH CTE
AS
(
SELECT COUNT(*) OVER() TotalRec, ROW_Number() over(ORDER BY id) RowNo, ColumnOne, ColumnTwo
FROM
(
SELECT ColumnOne, ColumnTwo
FROM table1 ct LEFT OUTER JOIN table2 IR ON ct.code=IR.code
WHERE table1.code=3
Group By ColumnOne, ColumnTwo
)ImmCat
)
SELECT TotalRec TotalRec,
CASE WHEN TotalRec%@PageSize > 0 THEN TotalRec/@PageSize) +1 ELSE TotalRec/@PageSize) END TotalPage
,ColumnOne, ColumnTwo
FROM CTE
WHERE RowNo BETWEEN (((@PageNo - 1)*@PageSize) + 1)) AND (@PageNo * @PageSize))
Você certamente pode evitar uma condicional aqui, mas também não precisa de
CEILING
conversão de ounumeric
para obter o número total de páginas se ambos@totalrec
e@pagesize
forem inteiros (e parece seguro assumir que são). A fórmula a seguir fornecerá o número de páginas para acomodar@totalrec
as linhas, dado o tamanho da página de@pagesize
:Você tem vários erros de digitação, uma referência ambígua, possível div/0 e não sei dizer se os parâmetros de entrada são zero ou um, então isso pode precisar de alguns ajustes. Eu faria os parâmetros @TotalPage e @TotalRec OUTPUT, mas para simplificar:
EDIT: Corrigido um nome de variável, parênteses adicionados, alterados para assumir a base zero.
Existem duas maneiras a seguir para obter o número total de páginas, recomendamos primeiro.
1.
ceiling(convert(numeric(9,4),@totalrec)/convert(numeric(9,4),@pagesize)) as TotalPage
2.
CASE WHEN TotalRec%@PageSize > 0 THEN TotalRec/@PageSize) +1 ELSE TotalRec/@PageSize) END TotalPage