sql - 在分页期间获取SQL Server中记录总数的有效方法

标签 sql sql-server

在 SQL Server 中查询表时,我尝试仅获取当前页的记录。但是,我需要为特定查询返回的记录总数来计算页数。如何在不编写另一个查询来计算记录的情况下有效地执行此操作。

 WITH allentities 
         AS (SELECT Row_number() OVER (ORDER BY se.entityid ASC) AS 
                    rowid 
                    ,empid
                    ,lastname 
                    ,firstname
                     ,d.depname 

             FROM   emp e join dep d on e.depid=d.depid) 
    SELECT * 
    FROM   allentities 
    WHERE  rowid >= @pageid 
           AND rowid <= @pageid + 20 

最佳答案

如果您添加第二个 ROW_NUMBER() 排序 DESC 而不是 ASC,则可以通过将两个相加来计算记录总数行计数在一起并减一。结果集中的任何行都将具有正确的总行数:

 WITH allentities 
         AS (SELECT Row_number() OVER (ORDER BY se.entityid ASC) AS 
                    rowid 
                    ,empid
                    ,lastname 
                    ,firstname
                    ,d.depname 
                    ,ROW_NUMBER() OVER (ORDER BY se.entityid DESC) AS rowIdNeg
             FROM   emp e join dep d on e.depid=d.depid) 
    SELECT * 
            ,rowid + rowIdNeg - 1 as totalRecords
    FROM   allentities 
    WHERE  rowid >= @pageid 
           AND rowid <= @pageid + 20 

关于sql - 在分页期间获取SQL Server中记录总数的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4007803/

相关文章:

mysql - 大数据从Oracle迁移到MySQL

java - android 和 java 中的 SQLite 数据库

sql - MySQL - 如何检索同一行中的列作为 min/mx 返回的值

sql - BULK INSERT SQL SERVER 的乐趣 - 指定代码页的类型不匹配或无效字符

sql-server - 根据条件将数据从表 1 归档到表 2 | SQL Server 2017 Express

sql-server - 订单管理的数据库设计

sql - 监控长时间运行的 PL/SQL block

sql - 公平分配分配算法

SQL Server 2008链接服务器连接字符串设置

sql-server - 添加约束是 DDL 或 DML