Я хотел бы спросить, есть ли способ включить общее количество строк в качестве дополнительного столбца в наборы результатов, возвращаемые из запроса TSQL, используя также Row_Number
( SQL 2005) команда.
Например, получение набора результатов из запроса к таблице Book в форме, подобной этой:
RowNum BookId BookTitle TotalRows
--------------------------------------------
1 1056 Title1 5
2 1467 Title2 5
3 121 Title3 5
4 1789 Title4 5
5 789 Title5 5
Запрос является частью настраиваемой функции разбиения по страницам, реализованной в хранимой процедуре. Цель состоит в том, чтобы вернуть назад только записи для текущего индекса страницы и ограниченные размером страницы, но также количество общего количества записей в операторе выбора, чтобы определить общее количество страниц набора результатов.
Из комментариев, приложенных к вопросу, ясно, что этот вопрос относится к пейджингу. В этом сценарии есть два широких подхода:
Первый вариант хорошо работает, если общее количество строк измеряется тысячами. Если общее число намного больше, лучше всего выполнить запрос дважды.
Это типичный компромисс между пространством и обработкой.
Ваш пробег может быть разным - то, что хорошо работает в одной ситуации, может оказаться ужасным в другой!
Пример использования базы данных AdventureWorks
select
*,
TotalVolume = (select COUNT(*) from HumanResources.Department)
from HumanResources.Department
В SQL Server 2005 и новее вы можете сделать это с помощью CTE:
WITH result AS (SELECT ... your query here ...)
SELECT
*,
(SELECT COUNT(*) FROM result) AS TotalRows
FROM result
В целом я бы не советовал делать это, но если вам действительно нужно, то вот как это сделать.
SELECT n ,
COUNT(*) OVER ( PARTITION BY 1 )
FROM ( SELECT 1 AS n
UNION ALL
SELECT 2 AS n
) AS t
Обратите внимание, что @@ ROWCOUNT дает вам количество строк из предыдущей команды. Запустите это:
SELECT 1 AS n;
SELECT n ,
@@ROWCOUNT
FROM ( SELECT 1 AS n
UNION ALL
SELECT 2 AS n
) AS t