use demo select row_number() over(orderby Score desc) as RowId,* from T_User
结果:
RowId UserId UserName Score -------------------- -------------------------------- ---------------------------------------------------------------- ----------- 1 pd005 Evens 93 2 pd004 Brue 86 3 pd002 James 80 4 pd003 Allen 80 5 pd001 Steven 78
三、rank()排序字段相同的记录占有名次
use demo select rank() over(orderby Score desc) as RowId,* from T_User
结果:
RowId UserId UserName Score -------------------- -------------------------------- ---------------------------------------------------------------- ----------- 1 pd005 Evens 93 2 pd004 Brue 86 3 pd002 James 80 3 pd003 Allen 80 5 pd001 Steven 78
四、dense_rank() 排序字段相同的记录同占一个名次
use demo select dense_rank() over(orderby Score desc) as RowId,* from T_User
结果:
RowId UserId UserName Score -------------------- -------------------------------- ---------------------------------------------------------------- ----------- 1 pd005 Evens 93 2 pd004 Brue 86 3 pd002 James 80 3 pd003 Allen 80 4 pd001 Steven 78
五、ntile() 是按排序字段把结果分成几个等级
use demo select ntile(3) over(orderby Score desc) as RowId,* from T_User
结果:
RowId UserId UserName Score -------------------- -------------------------------- ---------------------------------------------------------------- ----------- 1 pd005 Evens 93 1 pd004 Brue 86 2 pd002 James 80 2 pd003 Allen 80 3 pd001 Steven 78
六、另外可以利用row_number()进行高效分页
--@PageSize为每页数据多少,@PageIndex为当前页 use demo declare@PageSizeint set@PageSize=2 declare@PageIndexint set@PageIndex=2 selecttop(@PageSize) * from ( select row_number() over(orderby Score desc) as RowId,* from T_User ) T_User_Score where RowId between ((@PageIndex-1)*@PageSize+1) and@PageSize*@PageIndex
分页数据:
RowId UserId UserName Score -------------------- -------------------------------- ---------------------------------------------------------------- ----------- 3 pd002 James 80 4 pd003 Allen 80
全部数据:
RowId UserId UserName Score -------------------- -------------------------------- ---------------------------------------------------------------- ----------- 1 pd005 Evens 93 2 pd004 Brue 86 3 pd002 James 80 4 pd003 Allen 80 5 pd001 Steven 78