我必须根据要求对查询应用分页我需要两个额外的列而不是查询结果
1. 总记录
2. 总页数
但我试图确认这是检索总页数的正确方法
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))
您当然可以在这里避免条件,但是如果和都是整数(并且假设它们是整数似乎是安全的),您也不需要 either
CEILING
或 转换为numeric
来获取总页数。给定页面大小,以下公式将为您提供容纳行的页数:@totalrec
@pagesize
@totalrec
@pagesize
您有几个拼写错误、一个模糊的引用、可能的 div/0,我无法判断输入参数是基于零还是基于一,因此可能需要进行一些调整。我会制作 @TotalPage 和 @TotalRec OUTPUT 参数,但为了简单起见:
编辑:修复了一个变量名,添加了parens,更改为假设基于零。
获取总页数有以下两种方式,推荐第一种。
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