SQL Server 2005学习总结:排名函数
2008-08-30 09:57:02 来源:WEB开发网SQL 2005实现排名非常方便,但是用SQL 2000实现排名就比较麻烦,下面是SQL 2000的实现代码:
--RANK在sql 2000中的实现
selectorderid,qty,
(selectcount(1)+1fromrankorderwhereqty
fromrankorderr
ORDERBYqty
go
--ROW_NUMBER在sql 2000中的实现
--利用临时表和IDENTITY(函数)
selectidentity(int,1,1)as[ROW_NUMBER],orderid,qty
into#tem
fromrankorder
selectorderid,qty,[ROW_NUMBER]
from#tem
droptable#tem
go
--DENSE_RANK在sql2000中的实现
selectidentity(int,1,1)asids,qty
into#t
fromrankorder
groupbyqty
orderbyqty
selectr.orderid,r.qty,t.idsas[DENSE_RANK]
fromrankorderrjoin#tt
onr.qty=t.qty
droptable#t
go
排名函数是与窗口函数OVER()配合一起使用的。
如果借助OVER子句的参数PARTITION BY,就可以将结果集分为多个分区。排名函数将在每个分区内进行排名.
--例题
SELECTorderid,qty,
DENSE_RANK()OVER(ORDERBYqty)ASa,
DENSE_RANK()OVER(PARTITIONBYorderidORDERBYqty)ASb
FROMrankorder
ORDERBYqty
--说明:
--a列是在全部记录上进行的排名
--b列是把orderid中的记录分成了10,21,22,30,40,80这6个区,再在每个区上进行的排名。
orderidqtyab
101011
301011
401011
801011
301522
302033
212031
222031
103042
303044
404052
我们看到排名函数可以很简便的得到各种类型的排名
以下是我对4个排名函数的类比表格:
排名连续性 排名并列性
RANK() 不一定连续 有并列
DENSE_RANK() 连续 有并列
ROW_NUMBER() 连续 无并列
NTILE() 连续 有并列
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接