Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Получаване на общ брой редове по време на страниране

Не е необходимо да изпълнявате заявката два пъти.

SELECT ..., total_count = COUNT(*) OVER()
FROM ...
ORDER BY ...
OFFSET 120 ROWS
FETCH NEXT 10 ROWS ONLY;

Въз основа на чат , изглежда вашият проблем е малко по-сложен - прилагате DISTINCT към резултата в допълнение към странирането. Това може да направи сложно определянето какво точно е COUNT() трябва да изглежда и къде трябва да отиде. Ето един начин (просто искам да демонстрирам това, вместо да се опитвам да включа техниката във вашата много по-сложна заявка от чата):

USE tempdb;
GO
CREATE TABLE dbo.PagingSample(id INT,name SYSNAME);

-- insert 20 rows, 10 x 2 duplicates
INSERT dbo.PagingSample SELECT TOP (10) [object_id], name FROM sys.all_columns;
INSERT dbo.PagingSample SELECT TOP (10) [object_id], name FROM sys.all_columns;

SELECT COUNT(*) FROM dbo.PagingSample; -- 20

SELECT COUNT(*) FROM (SELECT DISTINCT id, name FROM dbo.PagingSample) AS x; -- 10

SELECT DISTINCT id, name FROM dbo.PagingSample; -- 10 rows

SELECT DISTINCT id, name, COUNT(*) OVER() -- 20 (DISTINCT is not computed yet)
 FROM dbo.PagingSample
 ORDER BY id, name
 OFFSET (0) ROWS FETCH NEXT (5) ROWS ONLY; -- 5 rows

-- this returns 5 rows but shows the pre- and post-distinct counts:
SELECT PostDistinctCount = COUNT(*) OVER() -- 10, 
  PreDistinctCount -- 20, 
  id, name 
FROM 
(
  SELECT DISTINCT id, name, PreDistinctCount = COUNT(*) OVER() 
    FROM dbo.PagingSample
    -- INNER JOIN ...
) AS x
ORDER BY id, name
OFFSET (0) ROWS FETCH NEXT (5) ROWS ONLY;

Почистване:

DROP TABLE dbo.PagingSample;
GO


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мога ли да задам ignore_dup_key за първичен ключ?

  2. Проверка на версията на SSIS

  3. Log4net пише персонализиран обект в sql база данни с помощта на персонализиран appender?

  4. Вземете списък с таблици със или без ограничение на първичен ключ във всички бази данни от екземпляр на SQL Server - SQL Server / TSQL Урок, част 61

  5. Процентът на SQL Server 2005 в скоби в осевата таблица