在本教學中,將學習如何使用SQL Server ROW_NUMBER()
函數為結果集的每一行分配一個連續整數。
SQL Server ROW_NUMBER()函數簡介
ROW_NUMBER()
是一個Window函數,它為結果集的分區中的每一行分配一個連續的整數。 行號以每個分區中第一行的行號開頭。
以下是ROW_NUMBER()
函數的語法:
ROW_NUMBER() OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
)
在上面語法中,
PARTITION BY
子句將結果集劃分為分區。ROW_NUMBER()
函數分別應用於每個分區,並重新初始化每個分區的行號。PARTITION BY
子句是可選的。如果未指定,ROW_NUMBER()
函數會將整個結果集視為單個分區。ORDER BY
子句定義結果集的每個分區中的行的邏輯順序。ORDER BY
子句是必需的,因為ROW_NUMBER()
函數對順序敏感。
SQL Server ROW_NUMBER()示例
下麵將使用示例資料庫中的sales.customers
表來演示ROW_NUMBER()
函數。
1. 在結果集中使用SQL Server ROW_NUMBER()函數示例
以下語句使用ROW_NUMBER()
為每個客戶行分配一個序號:
SELECT
ROW_NUMBER() OVER (
ORDER BY first_name
) row_num,
first_name,
last_name,
city
FROM
sales.customers;
執行上面查詢語句,得到以下結果:
在此示例中,未指定PARTITION BY
子句,因此,ROW_NUMBER()
將整個結果集視為單個分區。
2. 在分區上使用SQL Server ROW_NUMBER()示例
以下示例使用ROW_NUMBER()
函數為每個客戶分配一個順序整數。 當城市發生變化時,它會重置數字:
SELECT
first_name,
last_name,
city,
ROW_NUMBER() OVER (
PARTITION BY city
ORDER BY first_name
) row_num
FROM
sales.customers
ORDER BY
city;
執行上面查詢語句,得到以下結果:
在此示例中,使用PARTITION BY
子句將客戶按城市劃分為分區。 當城市發生變化時,行號重新初始化。
3. 使用ROW_NUMBER()進行分頁
ROW_NUMBER()
函數對於應用程式中的分頁很有用。 例如,可以按分頁顯示客戶列表,每個頁面有10
行。
以下示例使用ROW_NUMBER()
將客戶從第11
行返回到第20
行作第二頁顯示的結果:
WITH cte_customers AS (
SELECT
ROW_NUMBER() OVER(
ORDER BY
first_name,
last_name
) row_num,
customer_id,
first_name,
last_name
FROM
sales.customers
) SELECT
customer_id,
first_name,
last_name
FROM
cte_customers
WHERE
row_num > 20 AND
row_num <= 30;
執行上面查詢語句,得到以下結果:
在這個例子中:
- 首先,CTE使用
ROW_NUMBER()
函數為結果集中的每一行分配一個連續的整數。 - 其次,外部查詢返回第二頁的行,其行號在
11
到20
之間。
在本教學中,學習了如何使用SQL Server ROW_NUMBER()
函數為查詢分區中的每一行分配一個順序整數。
上一篇:
SQL Server Window函數
下一篇:無