sql - 计算select语句中的记录页数

标签 sql sql-server

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

我打算做这样的事情:

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

因此,对于该声明,我希望为 99 条记录取回 2,对于 100 条记录取回 2,对于 101 条记录取回 3

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

编辑澄清:
我不想得到分页记录,只想得到总页数

最佳答案

要计算页数,只需取超过页大小的记录数的上限:

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从您的应用程序。

关于sql - 计算select语句中的记录页数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7182325/

相关文章:

sql - oracle中有没有类似mysql中group_concat的函数?

sql-server - 我的 SQL 有什么问题吗? (找到 "previous"的记录)

c# - 在数据库中插入多条记录的最快方法

sql-server - TSQL - Select 中的 While 循环?

sql - 没有与引用表的给定键匹配的唯一约束

sql - 如何过滤 where 子句中的复合键?

PHP 正在更新一个不存在的数据库索引

sql - 选择有序 SQL 表中某一行之后的所有内容

sql - COUNT(*) 什么时候返回 NULL?

带连接的 SQL SELECT INTO 查询,错误 "There is already an object named ' **** *' in the database."