结果集一组数据的第几条ROW_NUMBER基本用法
因为项目中用到,今天来记录下 ROW_NUMBER的用法。
说明:返回结果集分区内行的序列号,每个分区的第一行从 1 开始。
语法:ROW_NUMBER () OVER ([ <partition_by_clause>]<order_by_clause> ) 。
备注:ORDERBY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。
参数:<partition_by_clause> :将FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。
<order_by_clause>:确定将 ROW_NUMBER 值分配给分区中的行的顺序。
返回类型:bigint 。
假如要得到一组数据,第一条,第二条,第三条,第四条,第五条 ,分别得每一条中的一个字段的值作为一个行转列的值。
原数据是:
学号 学期 语文 id xueqi yuwen 1001 1 90 1001 2 60 1001 3 70 1001 4 80
希望得到数据:
学号 语文1 语文2 语文3 语文4 1001
这样,这里就可以派上用场了。
SELECT CASE WHEN ( ROW_NUMBER() OVER(PARTITION BY id ORDER BY xueqi ) = 1 ) THEN inner_cd END AS 语文1, CASE WHEN ( ROW_NUMBER() OVER(PARTITION BY id ORDER BY xueqi ) = 2 ) THEN inner_cd END AS 语文_2, CASE WHEN ( ROW_NUMBER() OVER(PARTITION BY id ORDER BY xueqi ) = 3 ) THEN inner_cd END AS 语文3, CASE WHEN ( ROW_NUMBER() OVER(PARTITION BY id ORDER BY xueqi ) = 4 ) THEN inner_cd END AS 语文_4, CASE WHEN ( ROW_NUMBER() OVER(PARTITION BY id ORDER BY xueqi ) = 5 ) THEN inner_cd END AS 语文_5 FROM TEMP .xxx WHERE TEMP .xxx.id = '10001'
这样就可以办到了。