ROW_NUMBER (Transact-SQL)

简介: ROW_NUMBER (Transact-SQL) SQL Server 2014 其他版本 返回结果集分区内行的序列号,每个分区的第一行从 1 开始。 适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版

ROW_NUMBER (Transact-SQL)

SQL Server 2014

返回结果集分区内行的序列号,每个分区的第一行从 1 开始。

适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。

主题链接图标 Transact-SQL 语法约定

ROW_NUMBER ( ) 
    OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )

PARTITION BY  value_expression

将 FROM 子句生成的结果集划分为应用 ROW_NUMBER 函数的分区。 value_expression 指定对结果集进行分区所依据的列。 如果未指定 PARTITION BY,则此函数将查询结果集的所有行视为单个组。 有关详细信息,请参阅 OVER 子句 (Transact-SQL)

order_by_clause

ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。 它是必需的。 有关详细信息,请参阅 OVER 子句 (Transact-SQL)

bigint

除非以下条件成立,否则不保证在每次执行时,使用 ROW_NUMBER() 的查询所返回行的顺序完全相同。

  1. 分区列的值是唯一的。

  2. ORDER BY 列的值是唯一的。

  3. 分区列和 ORDER BY 列的值的组合是唯一的。

ROW_NUMBER() 具有不确定性。 有关详细信息,请参阅确定性函数和不确定性函数

A.返回销售人员的行号

以下示例根据销售人员年初至今的销售额,计算 Adventure Works Cycles 中销售人员的行号。

USE AdventureWorks2012; 
GO
SELECT ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS Row, 
    FirstName, LastName, ROUND(SalesYTD,2,1) AS "Sales YTD" 
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0;

下面是结果集:

Row FirstName    LastName               SalesYTD
--- -----------  ---------------------- -----------------
1   Linda        Mitchell               4251368.54
2   Jae          Pak                    4116871.22
3   Michael      Blythe                 3763178.17
4   Jillian      Carson                 3189418.36
5   Ranjit       Varkey Chudukatil      3121616.32
6   José         Saraiva                2604540.71
7   Shu          Ito                    2458535.61
8   Tsvi         Reiter                 2315185.61
9   Rachel       Valdez                 1827066.71
10  Tete         Mensa-Annan            1576562.19
11  David        Campbell               1573012.93
12  Garrett      Vargas                 1453719.46
13  Lynn         Tsoflias               1421810.92
14  Pamela       Ansman-Wolfe           1352577.13

B.返回行的子集

下面的示例按 OrderDate 的顺序计算 SalesOrderHeader 表中所有行的行号,并只返回行 50 到 60(含)。

USE AdventureWorks2012;
GO
WITH OrderedOrders AS
(
    SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber
    FROM Sales.SalesOrderHeader 
) 
SELECT SalesOrderID, OrderDate, RowNumber  
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60;

C.将 ROW_NUMBER () 与 PARTITION 一起使用

以下示例使用 PARTITION BY 参数按列 TerritoryName 对结果集进行分区。 在 OVER 子句中指定的 ORDER BY 子句按列 SalesYTD 对每个分区中的行进行排序。 SELECT 语句中的ORDER BY 按 TerritoryName 子句对整个查询结果集进行排序。

USE AdventureWorks2012;
GO
SELECT FirstName, LastName, TerritoryName, ROUND(SalesYTD,2,1),
ROW_NUMBER() OVER(PARTITION BY TerritoryName ORDER BY SalesYTD DESC) AS Row
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0
ORDER BY TerritoryName;

下面是结果集:

FirstName  LastName             TerritoryName        SalesYTD      Row
---------  -------------------- ------------------   ------------  ---
Lynn       Tsoflias             Australia            1421810.92    1
José       Saraiva              Canada               2604540.71    1
Garrett    Vargas               Canada               1453719.46    2
Jillian    Carson               Central              3189418.36    1
Ranjit     Varkey Chudukatil    France               3121616.32    1
Rachel     Valdez               Germany              1827066.71    1
Michael    Blythe               Northeast            3763178.17    1
Tete       Mensa-Annan          Northwest            1576562.19    1
David      Campbell             Northwest            1573012.93    2
Pamela     Ansman-Wolfe         Northwest            1352577.13    3
Tsvi       Reiter               Southeast            2315185.61    1
Linda      Mitchell             Southwest            4251368.54    1
Shu        Ito                  Southwest            2458535.61    2
Jae        Pak                  United Kingdom       4116871.22    1

参考



原文地址:https://msdn.microsoft.com/zh-cn/library/ms186734.aspx
相关文章
|
Kubernetes Linux iOS开发
使用kubectl连接远程Kubernetes(k8s)集群
在自己本机当中安装kubectl并远程连接Kubernetes(k8s)集群。覆盖了Windows、MacOS和Linux操作系统,步骤超详细,在后面还有关于MacOS和Linux命令自动补全
1998 1
使用kubectl连接远程Kubernetes(k8s)集群
|
存储 Cloud Native 数据库
云原生之使用docker部署ZPan个人网盘系统
云原生之使用docker部署ZPan个人网盘系统
662 2
云原生之使用docker部署ZPan个人网盘系统
|
14天前
|
人工智能 自然语言处理 数据可视化
白嫖7000万Tokens!阿里云百炼新用户专享,零成本玩转通义千问等70+大模型
阿里云百炼新用户专享:开通即赠超7000万Tokens!百炼官网:https://t.aliyun.com/U/fPVHqY 零门槛、免绑卡,可免费调用通义千问等70+主流大模型,支持AI编程、智能客服、内容创作等场景,价值数百元,有效期90天。
521 2
|
10月前
|
数据采集 人工智能 算法
“脏”数据毁一生?教你用大数据清洗术,给数据洗个“澡”!
“脏”数据毁一生?教你用大数据清洗术,给数据洗个“澡”!
685 4
|
9月前
|
Ubuntu 安全 Oracle
Linux发行版三巨头,你会选择哪一个?
如果你需要一个高度稳定和可靠的系统用于服务器或生产环境,且希望完全自由的软件,Debian是一个很好的选择。 如果你是一个新手或桌面用户,希望快速上手并获得来源a2.icy.mobi66来源a2.hum.mobi66广泛的社区支持,Ubuntu是一个理想的选择。 如果你是一个企业用户,需要专业的技术支持和服务,并且愿意为此付费,Red Hat Enterprise Linux无疑是最佳选择。
|
存储 安全 Java
"Java编码魔法:揭秘图片与文件的Base64神秘转换术,让数据在指尖跳跃!"
【8月更文挑战第16天】Base64编码在Java开发中常用于将二进制数据如图片转换为ASCII字符串以便传输。编码使用64个字符及等号填充,每3字节数据编码为4个字符。Java利用`java.util.Base64`类实现此功能:读取图片或文件为字节数组后进行编码。解码时将Base64字符串还原为字节数组并写入文件。需注意编码效率降低、不提供安全性及特殊字符兼容性等问题。掌握这些技巧有助于解决Web开发中的数据传输需求。
886 4
|
缓存 JavaScript 前端开发
npm命令介绍
npm命令介绍
328 1
|
前端开发 JavaScript 搜索推荐
深入探讨单页面应用程序(SPA)的优势与实践
深入探讨单页面应用程序(SPA)的优势与实践
|
机器学习/深度学习 Python
【Python 机器学习专栏】混淆矩阵与 ROC 曲线分析
【4月更文挑战第30天】本文介绍了机器学习中评估模型性能的两种工具——混淆矩阵和ROC曲线。混淆矩阵显示了模型在不同类别上的预测情况,包括真正例、假正例、真反例和假反例,帮助评估模型错误类型和数量。ROC曲线则通过假正率和真正率展示了模型的二分类性能,曲线越接近左上角,性能越好。文章还提供了Python中计算混淆矩阵和ROC曲线的代码示例,强调它们在模型选择、参数调整和理解模型行为中的应用价值。
739 0
【日常记录】关于LinkedHashMap中key为数字字符串根据compareTo排序的问题
【日常记录】关于LinkedHashMap中key为数字字符串根据compareTo排序的问题