计算select语句中的记录页数

时间:2011-08-24 21:11:11

标签: sql sql-server

所以我想弄清楚我需要多少页来显示我的记录,基本上想要一个页数。

我打算做这样的事情:

SELECT COUNT(*) % 50 
FROM Customers 
WHERE ManufacturerID=@ManufacturerID 
AND ModifiedOn > @tStamp

对于那个陈述,我想要取回一个2表示99个记录,2表示100个,3个表示101个

这会有用吗?这是一种不好的做法吗?对我测试一些值似乎有点不稳定。

编辑澄清: 我不想获取分页记录,只需要总页数

3 个答案:

答案 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”是要在页面中显示的项目数。希望这有助于某人。