我有超过30万行,即使只使用TOP *语句选择20/50/100条记录,我也想返回总记录数。如何使用TOP * select返回记录总数
是否可以过滤选择像
select top 50 * from table where rule1=rule1 and rule=rule2
比方说,记录的是总数,如果数据库是300和000上面的选择将返回4000条记录。但实际上它只会返回50条记录,我需要知道数据库中manu是如何使用这个where
语句(它将返回4000)。
感谢
我有超过30万行,即使只使用TOP *语句选择20/50/100条记录,我也想返回总记录数。如何使用TOP * select返回记录总数
是否可以过滤选择像
select top 50 * from table where rule1=rule1 and rule=rule2
比方说,记录的是总数,如果数据库是300和000上面的选择将返回4000条记录。但实际上它只会返回50条记录,我需要知道数据库中manu是如何使用这个where
语句(它将返回4000)。
感谢
这个问题有很多简单的答案,正如其他海报指出的那样。根据你的情况,也有很多微妙之处。有一个相当深入的讨论这个问题@Efficient way of getting @@rowcount from a query using row_number
你可以这样做:
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
SELECT TOP 50
*
FROM TableName t1
INNER JOIN (SELECT
COUNT(*) AS CountOfRecords
FROM TableName) t2 on 1=1
select top 50 *, count(*) over()
from table
where rule1=rule1 and rule=rule2
你想在哪里'4000'? – JNK 2011-04-12 14:57:07
当然,你想指定字段,并从不使用select *。 – HLGEM 2011-04-12 15:12:53