我有超过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)。
由于
答案 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