你如何选择TOP x,但仍然得到整个查询的COUNT?

时间:2011-10-05 14:20:56

标签: sql sql-server

我正在编写一个网页,以根据用户指定的过滤条件交互式过滤结果。我只想从SQL返回前20行,但我想知道有多少行符合标准(Count)。我希望能够告诉用户:“这里是符合条件的前20行,顺便说一下,还有2,000行我没有在这里显示”。

我知道我可以简单地运行两次查询,但是EWWWW是昂贵且浪费的。如何在不对数据库征税的情况下实现我的目标?

2 个答案:

答案 0 :(得分:30)

您可以使用COUNT(*) OVER()

SELECT TOP 20 *, 
       COUNT(*) OVER() AS TotalMatchingRows
FROM master..spt_values
WHERE type='P'
ORDER BY number

执行两个查询可能会更有效,但是如果您有更窄的索引可用于确定匹配的行数但不包括整个SELECT列表。

答案 1 :(得分:0)

从Process_Master中选择COUNT(*),其中dt_time =(按DT_TIME desc从Process_Master订单中选择前1个(dt_time))