WEB开发网
开发学院数据库MSSQL Server SQL Server 2005学习总结:排名函数 阅读

SQL Server 2005学习总结:排名函数

 2008-08-30 09:57:02 来源:WEB开发网   
核心提示: SQL 2005实现排名非常方便,但是用SQL 2000实现排名就比较麻烦,SQL Server 2005学习总结:排名函数(3),下面是SQL 2000的实现代码: --RANK在sql 2000中的实现selectorderid,qty,(selectcount(1)+1fromran

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() 连续 有并列

上一页  1 2 3 

Tags:SQL Server 学习

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接