所以我想弄清楚我需要多少页来显示我的记录,基本上想要一个页数。
我打算做这样的事情:
SELECT COUNT(*) % 50
FROM Customers
WHERE ManufacturerID=@ManufacturerID
AND ModifiedOn > @tStamp
对于那个陈述,我想要取回一个2表示99个记录,2表示100个,3个表示101个
这会有用吗?这是一种不好的做法吗?对我测试一些值似乎有点不稳定。
编辑澄清: 我不想获取分页记录,只需要总页数
答案 0 :(得分:15)
要计算页数,只需占用页面大小的记录数上限:
SELECT CEILING(COUNT(*) / @PageSize) FROM ...
@PageSize
在您的情况下为50。或者,由于您的应用程序可能知道每页显示所需的记录数,因此只需编写一个从表中返回COUNT(*)
的查询,然后在代码中进行计算。例如:
var totalPages = Math.ceil(recordCount / pageSize);
当你到达想要选择属于某个页面的记录时,我会这样做(以防万一你好奇):
WITH Paged AS
(
SELECT
ROW_NUMBER() OVER(ORDER BY SortColumn) AS [RowNum]
,* -- because we're going to choose which columns we need later
FROM
[MyTable]
)
SELECT
[Column1]
,[Column2]
,etc...
FROM
Paged
WHERE
[RowNum] BETWEEN (@PageNumber - 1) * @PageSize + 1 AND @PageNumber * @PageSize
ORDER BY
[SortColumn]
您必须从申请中传递@PageNumber
和@PageSize
。
答案 1 :(得分:2)
如果您使用
ROW_NUMBER() OVER ( {ORDER statement} ) AS ROWNUMBER
在您的分页SELECT语句中,您可以添加
COUNT(*) OVER() AS TOTALCOUNT
获取查询找到的记录总数
答案 2 :(得分:2)
我认为,获取总页数的基本问题仍未得到解答。
通过使用简单的逻辑,我认为它可以在SQL Query中实现:
TotalPages = (Count(*) OVER() + @NumberOfItems - 1)/@NumberOfItems
其中“@NumberOfItems”是要在页面中显示的项目数。希望这有助于某人。