Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nhận tổng số hàng trong khi phân trang

Bạn không phải chạy truy vấn hai lần.

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

Dựa trên cuộc trò chuyện , có vẻ như vấn đề của bạn phức tạp hơn một chút - bạn đang áp dụng DISTINCT đến kết quả ngoài việc phân trang. Điều này có thể làm cho việc xác định chính xác COUNT() là gì nên trông như thế nào và nó sẽ đi đâu. Đây là một cách (tôi chỉ muốn chứng minh điều này thay vì cố gắng kết hợp kỹ thuật này vào truy vấn phức tạp hơn nhiều của bạn từ trò chuyện):

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;

Dọn dẹp:

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. Trả lại id của hàng có dữ liệu trùng lặp

  2. Định dạng SQL Server các vị trí thập phân với dấu phẩy

  3. Microsoft SQL làm tròn thành số nguyên, cần đến 1 chữ số thập phân

  4. Cách sử dụng Thủ tục lưu trữ trong SqlCE

  5. Cách hàm RIGHT () hoạt động trong SQL Server (T-SQL)