qua*_*rkX 19 sql t-sql sql-server
我想询问是否有一种方法可以使用Row_Number
(SQL 2005)命令在TSQL查询的返回结果集中包含总行数(作为附加列).例如,以类似于以下的形式从Book表中获取查询结果集:
RowNum BookId BookTitle TotalRows
--------------------------------------------
1 1056 Title1 5
2 1467 Title2 5
3 121 Title3 5
4 1789 Title4 5
5 789 Title5 5
Run Code Online (Sandbox Code Playgroud)
该查询是存储过程中实现的自定义分页功能的一部分.目标是仅返回当前页面索引的记录并限制为页面大小,还要返回select语句中的记录总数,以确定结果集页面的总数.
Jon*_*our 19
在SQL Server 2008及更高版本中,添加COUNT(*)OVER()作为查询中的列名称之一,并将使用返回的总行填充.它在每一行中重复,但至少可以获得该值.许多其他解决方案不起作用的原因在于,对于非常大的结果集,在迭代所有行之后,您将不知道总数,这在许多情况下是不实际的(尤其是顺序处理解决方案).例如,在调用第一个IDataReader.Read()之后,此技术为您提供总计数.
select COUNT(*) OVER () as Total_Rows, ... from ...
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 13
在SQL Server 2005及更高版本中,您可以使用CTE执行此操作:
WITH result AS (SELECT ... your query here ...)
SELECT
*,
(SELECT COUNT(*) FROM result) AS TotalRows
FROM result
Run Code Online (Sandbox Code Playgroud)
一般来说,我建议不要这样做,但如果你真的需要,那么这就是怎么做的.