ROW_NUMBER() OVER函数的基本用法
来源:互联网 发布:宜家值得买 知乎 编辑:程序博客网 时间:2024/06/05 06:52
语法PARTITION BY value_expression order_by_clause
ROW_NUMBER ( ) OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )
参数
将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。value_expression 指定对结果集进行分区所依据的列。如果未指定 PARTITION BY,则此函数将查询结果集的所有行视为单个组。有关详细信息,请参阅 OVER 子句 (Transact-SQL)。
ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。它是必需的。有关详细信息,请参阅 OVER 子句 (Transact-SQL)。
返回类型:bigint*不保证使用 ROW_NUMBER() 的查询返回的行对于每次执行在顺序上保持完全相同,除非以下条件成立。
分区列的值是唯一的。
ORDER BY 列的值是唯一的。
分区列和 ORDER BY 列的值的组合是唯一的。
A.返回销售人员的行号
以下示例根据销售人员年初至今的销售额,计算 Adventure Works Cycles 中销售人员的行号。
USE AdventureWorks2012; GOSELECT ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS Row, FirstName, LastName, ROUND(SalesYTD,2,1) AS "Sales YTD" FROM Sales.vSalesPersonWHERE TerritoryName IS NOT NULL AND SalesYTD <> 0;下面是结果集:
Row FirstName LastName SalesYTD--- ----------- ---------------------- -----------------1 Linda Mitchell 4251368.542 Jae Pak 4116871.223 Michael Blythe 3763178.174 Jillian Carson 3189418.365 Ranjit Varkey Chudukatil 3121616.326 José Saraiva 2604540.717 Shu Ito 2458535.618 Tsvi Reiter 2315185.619 Rachel Valdez 1827066.7110 Tete Mensa-Annan 1576562.1911 David Campbell 1573012.9312 Garrett Vargas 1453719.4613 Lynn Tsoflias 1421810.9214 Pamela Ansman-Wolfe 1352577.13
B.返回行的子集
下面的示例按 OrderDate 的顺序计算 SalesOrderHeader 表中所有行的行号,并只返回行 50 到 60(含)。
USE AdventureWorks2012;GOWITH 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;GOSELECT FirstName, LastName, TerritoryName, ROUND(SalesYTD,2,1),ROW_NUMBER() OVER(PARTITION BY TerritoryName ORDER BY SalesYTD DESC) AS RowFROM Sales.vSalesPersonWHERE TerritoryName IS NOT NULL AND SalesYTD <> 0ORDER BY TerritoryName;下面是结果集:FirstName LastName TerritoryName SalesYTD Row--------- -------------------- ------------------ ------------ ---Lynn Tsoflias Australia 1421810.92 1José Saraiva Canada 2604540.71 1Garrett Vargas Canada 1453719.46 2Jillian Carson Central 3189418.36 1Ranjit Varkey Chudukatil France 3121616.32 1Rachel Valdez Germany 1827066.71 1Michael Blythe Northeast 3763178.17 1Tete Mensa-Annan Northwest 1576562.19 1David Campbell Northwest 1573012.93 2Pamela Ansman-Wolfe Northwest 1352577.13 3Tsvi Reiter Southeast 2315185.61 1Linda Mitchell Southwest 4251368.54 1Shu Ito Southwest 2458535.61 2Jae Pak United Kingdom 4116871.22 1
- ROW_NUMBER() OVER函数的基本用法用法
- ROW_NUMBER() OVER函数的基本用法用法
- ROW_NUMBER() OVER函数的基本用法用法
- ROW_NUMBER() OVER函数的基本用法用法
- ROW_NUMBER() OVER函数的基本用法用法
- ROW_NUMBER() OVER函数的基本用法
- ROW_NUMBER() OVER函数的基本用法
- ROW_NUMBER() OVER函数的基本用法
- ROW_NUMBER() OVER函数的基本用法
- ROW_NUMBER() OVER函数的基本用法
- ROW_NUMBER() OVER函数的基本用法
- ROW_NUMBER() OVER函数的基本用法
- ROW_NUMBER() OVER函数的基本用法
- ROW_NUMBER() OVER函数的基本用法
- ROW_NUMBER() OVER函数的基本用法
- ROW_NUMBER() OVER函数的基本用法
- ROW_NUMBER() OVER函数的基本用法
- ROW_NUMBER() OVER函数的基本用法
- 线段树,树状数组
- Ubuntu 虚拟机设置静态IP地址
- 【程序23】打印菱形
- HDU 1728
- 两个向量点积的几何意义
- ROW_NUMBER() OVER函数的基本用法
- Ubuntu下安装Qt4和PyQt4
- 基于stm32f103zet6的FAT16文件系统学习4(管理SD卡,读取图片,字库)
- 浙江大华2011.10.10校园招聘会笔试题
- android下SQLite学习笔记
- 冒泡排序、插入排序、选择排序--C语言实现
- Bash游戏 V3
- 数据结构复习笔记(一)
- hdu 1548 最短路