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

kin*_*ngo 18 sql sql-server

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

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

Mar*_*ith 33

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

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

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

  • 我是白痴,你是禅师。:-) 我喜欢 SQL 专家,没有多余的装饰,只有事实。谢谢马丁。 (2认同)