我有一張超過 80 萬條記錄的表。該表需要按特定列“分組”。一個例子是:

但是,使用分頁時,事情會變得復雜。我想為每個組顯示 50 行。
這意味著如果我有以下資料:
| ID | 顏色 | 姓名 |
|---|---|---|
| 1 | 紅色的 | 紙#1 |
| 2 | 紅色的 | 論文#2 |
| 3 | 紅色的 | 論文#3 |
| 4 | 綠 | 論文#4 |
| 5 | 綠 | 論文#5 |
| 6 | 綠 | 紙#6 |
| 7 | 綠 | 論文#7 |
我想為2每頁的每個組獲取專案(而不是50,為了這個例子),在第 1 頁我有:
| ID | 顏色 | 姓名 |
|---|---|---|
| 1 | 紅色的 | 紙#1 |
| 2 | 紅色的 | 論文#2 |
| 4 | 綠 | 論文#4 |
| 5 | 綠 | 論文#5 |
在第 2 頁我有:
| ID | 顏色 | 姓名 |
|---|---|---|
| 3 | 紅色的 | 論文#3 |
| 6 | 綠 | 紙#6 |
| 7 | 綠 | 論文#7 |
我當前用于分頁的 SQL 查詢(SQL Server)如下:
SELECT
*
from
[Order]
ORDER BY
[From] ASC
OFFSET (@PageNumber - 1) * @RowsOfPage ROWS FETCH NEXT @RowsOfPage ROWS ONLY
uj5u.com熱心網友回復:
使用此示例資料:
CREATE TABLE Orders(Id int, Color varchar(10), Name varchar(50));
INSERT INTO Orders(Id,Color,Name) VALUES
(1, 'Red', 'Paper #1'),
(2, 'Red', 'Paper #2'),
(3, 'Red', 'Paper #3'),
(4, 'Green', 'Paper #4'),
(5, 'Green', 'Paper #5'),
(6, 'Green', 'Paper #6'),
(7, 'Green', 'Paper #7');
此查詢將執行以下操作:
DECLARE @PageNum int = 1;
DECLARE @PageSize int = 2;
SELECT *
FROM (
SELECT *,ROW_NUMBER() OVER(PARTITION BY Color ORDER BY Name) AS Row
FROM Orders
) t1
WHERE Row BETWEEN ((@PageNum-1)*@PageSize 1) AND (@PageNum*@PageSize)
ORDER BY Color,Name
第 1 頁:
第 2 頁:
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/325198.html
標籤:sql sql-server 查询语句
