Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Dapatkan jumlah baris total saat paging

Anda tidak perlu menjalankan kueri dua kali.

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

Berdasarkan obrolan , sepertinya masalah Anda sedikit lebih rumit - Anda menerapkan DISTINCT untuk hasil selain paging. Ini dapat membuatnya rumit untuk menentukan dengan tepat apa COUNT() harus terlihat seperti dan ke mana harus pergi. Inilah salah satu caranya (saya hanya ingin mendemonstrasikan ini daripada mencoba memasukkan teknik ini ke dalam kueri Anda yang jauh lebih kompleks dari obrolan):

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;

Membersihkan:

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. SQL Database Mirroring dan aplikasi web Anda

  2. 4 Cara Mendapatkan Riwayat Pekerjaan SQL Server

  3. Memformat output SQL Server PowerShell ke dalam kolom dan baris

  4. Kesalahan Impor BCP Nilai karakter tidak valid untuk spesifikasi pemeran

  5. T-sql, kutu, cap waktu