2011-04-12 35 views
2

我有超过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)。

感谢

+0

你想在哪里'4000'? – JNK 2011-04-12 14:57:07

+0

当然,你想指定字段,并从不使用select *。 – HLGEM 2011-04-12 15:12:53

回答

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 
2
SELECT TOP 50 
    * 
FROM TableName t1 
INNER JOIN (SELECT 
       COUNT(*) AS CountOfRecords 
      FROM TableName) t2 on 1=1 
6
select top 50 *, count(*) over() 
from table 
where rule1=rule1 and rule=rule2