由于MySQL与Oracle中一般可以借助内置函数直接输出表记录的序号,SQLServer2000没有提供这种函数,新版SQLServer2005终于提供了一种:row_number() over(order by 表字段)的函数实现了该功能,在此将一般实现方法
select * from (select uid,mobile,email,nickname,ROW_NUMBER() over (order by nickname desc) as sort from u_user) as u_temp
where sort>=6 and sort<=9
简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY nickname DESC)
是先把nickname列降序,再为降序以后每没条nickname记录返回一个序号。
nickname sort
1700 6
1500 7
1085 8
710 9
注:ORDER BY Uid,根据ES_USER表中Uid来进行排序;
row_number() 、Over(order by XXX [desc/asc])这两个函数一定是同时存在的。
语法: select top 5 * from( select row_number() over(order by 字段名) as 字段别名 from 表名) 别名 where 字段别名<=5
row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
SQL脚本:
SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee