Как вы выбираете TOP x, но все равно получаете COUNT всего запроса?

Я пишу веб-страницу для интерактивного фильтрации результатов на основе критериев фильтра, как это указано пользователем. Я хочу только вернуться из SQL в TOP 20 строк, но я хочу знать, сколько строк соответствует критериям (Count). Я хочу сказать пользователю: "вот 20 лучших строк, соответствующих вашим критериям, и BTW, было 2000 дополнительных строк, которые я не показываю здесь".

Я знаю, что я мог бы просто запустить запрос дважды, но EWWWW, что дорого и расточительно. Как я могу достичь того, чего хочу, не облагая налогом базу данных?

Ответ 1

Вы можете использовать COUNT(*) OVER()

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

Выполнение двух запросов может работать более эффективно, особенно если у вас есть более узкие индексы, которые можно использовать при определении совпадающего количества строк, но не охватывают весь список SELECT.