OLAP 编号函数表达式为单个查询的结果集中的每一行返回一序列的编号。
OLAP 编号函数表达式是您可在 SELECT 语句的 Projection 列表中包括,或在 SELECT 语句的 ORDER BY 子句中包括的 OLAP window 表达式。
对于同一函数,关键字 ROW_NUMBER 与 ROWNUMBER 是同义词。此编号函数就像是一个不要求 window ORDER 子句且不检查重复值的简化的 RANK 函数。ROW_NUMBER 函数往往为每一 OLAP window 分区中的每一行返回唯一的值。
ROW_NUMBER 函数不带参数,但您必须在 ROW_NUMBER(或 ROWNUMBER)关键字之后包括空的圆括号。
ROW_NUMBER 函数为每一 OLAP 分区中的每行返回一无符号整数。每一分区中的行编号的序列起始于 1,且每一后续的行增 1,不论 window 分区中连续的行是否有相同的或不同的列值。
如果未指定 window PARTITION 子句,则完整的结果集从 1 至 n 编号,此处,n 是查询或子查询返回的满足条件的行的数目。
如果为 ROW_NUMBER 函数定义 OLAP window 的 OVER 子句省略 window PARTITION 子句和 window ORDER 子句,则您必须在 OVER 关键字之后包括空的圆括号。
下列查询通过不同的包类型(pkg_type)对产品表中的行进行分区,并为每一分区指定从 1 重新开始的行编号。
SELECT ROW_NUMBER() OVER(PARTITION BY pkg_type ORDER BY prod_name) AS rownum, prod_name, pkg_type FROM product; ROWNUM PROD_NAME PKG_TYPE 1 Aroma Sounds CD Aroma designer box 2 Aroma Sounds Cassette Aroma designer box 1 Christmas Sampler Gift box 2 Coffee Sampler Gift box 3 Easter Sampler Basket Gift box 4 Spice Sampler Gift box 5 Tea Sampler Gift box 1 Aroma Roma No pkg 2 Aroma baseball cap No pkg 3 Aroma t-shirt No pkg 4 Assam Gold Blend No pkg 5 Assam Grade A No pkg 6 Breakfast Blend No pkg 7 Cafe Au Lait No pkg 8 Coffee Mug No pkg 9 Colombiano No pkg 10 Darjeeling Number 1 No pkg 11 Darjeeling Special No pkg 12 Demitasse Ms No pkg 13 Earl Grey No pkg ...
由于 window ORDER 子句指定 prod_name 列作为排序键,因此,在缺省的(ASC)顺序中,返回的行编号是基于产品名称的字母顺序。例如,在 "No pkg" 分区内,将三个 "Aroma" 产品编号为 1、2 和 3。(在缺省的 ASCII 顺序规则中大写字母排序在小写之上。)