Как вы выбираете 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
.