如何通过TOP *选择返回记录总数

时间:2011-04-12 14:54:28

标签: sql tsql select count

我有超过300 000行,即使我使用TOP *语句只选择20/50/100条记录,我也希望返回记录的总数。

是否可以过滤选择

select top 50 * from table where rule1=rule1 and rule=rule2

假设数据库为300 000并且上面选择的记录总数将返回4 000条记录。但实际上它只返回50条记录,我需要知道如何使用这个where语句在数据库中存在manu(它将返回4000)。

由于

4 个答案:

答案 0 :(得分:8)

select top 50 *, count(*) over()
from table
where rule1=rule1 and rule=rule2

答案 1 :(得分:4)

正如其他海报所指出的那样,这个问题有很多简单的答案。根据您的情况,还有很多细微之处。对问题@ Efficient way of getting @@rowcount from a query using row_number

进行了相当深入的讨论

答案 2 :(得分:2)

SELECT TOP 50 
  * 
FROM TableName t1
INNER JOIN (SELECT 
              COUNT(*) AS CountOfRecords 
            FROM TableName) t2 on 1=1

答案 3 :(得分:1)

你可以这样做:

select top 50 *, (select count(*) from table) 
from table 
where rule1=rule1 and rule=rule2

这将为主查询返回的每一行提供一个额外列的总行数。虽然不确定对此的性能影响......

从你的问题中不清楚你是否需要根据过滤的行数来计算,但如果是这样的话,那么:

select top 50 *, (select count(*) from table where rule1=rule1 and rule=rule2) 
from table 
where rule1=rule1 and rule=rule2