2005比2000新增了几个函数,分别是row_number()、rank()、dense_rank()、ntile(),下面以实例分别简单讲解一下。

create table gg(sname varchar(10),sort varchar(10),num int)

go

insert into gg

select '白芍','根茎类',55

union all

select '法半夏','根茎类',78

union all

select '柴胡','根茎类',60

union all

select '川芎','根茎类',99

union all

select '天香炉','草类',68

union all

select '灯心草','草类',55

union all

select '龙葵','草类',60

union all

select '石见穿','草类',60

union all

select '猪笼草','草类',70

union all

select '益母草','草类',86

union all

select '扁豆','果实类',86

union all

select '草果','果实类',70

union all

select '金樱子','果实类',55

union all

select '女贞子','果实类',94

union all

select '胖大海','果实类',66

union all

select '桑葚','果实类',78

select sname,sort,num,

row_number() over(order by num) as rownum,

rank() over(order by num) as ranknum,

dense_rank() over(order by num) as dersenum,

ntile(3) over(order by num) as ntilenum

from gg

--结果

--ROW_NUMBER()是按num由小到大逐一排名,不并列,排名连续

--RANK()是按num由小到大逐一排名,并列,排名不连续

--DENSE_RANK()是按num由小到大逐一排名,并列,排名连续

--NTILE()是按num由小到大分成组逐一排名,并列,排名连续

sname      sort       num       rownum        ranknum       dersenum       ntilenum
-------- --------- --------- ------------- ------------- --------------- ---------------
白芍         根茎类       55          1          1             1               1
灯心草       草类         55          2          1             1               1
金樱子       果实类       55          3          1             1               1
龙葵         草类         60          4          4             2               1
石见穿       草类         60          5          4             2               1
柴胡         根茎类       60          6          4             2               1
胖大海       果实类       66          7          7             3               2
天香炉       草类         68          8          8             4               2
草果         果实类       70          9          9             5               2
猪笼草       草类         70          10         9             5               2
法半夏       根茎类       78          11         11            6               2
桑葚         果实类       78          12         11            6               3
益母草       草类         86          13         13            7               3
扁豆         果实类       86          14         13            7               3
女贞子       果实类       94          15         15            8               3
川芎         根茎类       99          16         16            9               3

(16 行受影响)

select sname,sort,num,

row_number() over(partition by sort order by num) as rownum,

rank() over(partition by sort order by num) as ranknum,

dense_rank() over(partition by sort order by num) as dersenum,

ntile(3) over(partition by sort order by num) as ntilenum

from gg

--结果

此时加了partition by sort,就以类别来分类了,ntile(3)意思就是强制分为三组。

sname      sort           num       rownum        ranknum        dersenum       ntilenum
-------- ----------   --------- ------------- --------------- ---------------- -----------
灯心草       草类          55          1            1               1               1
龙葵         草类          60          2            2               2               1
石见穿       草类          60          3            2               2               2
天香炉       草类          68          4            4               3               2
猪笼草       草类          70          5            5               4               3
益母草       草类          86          6            6               5               3
白芍         根茎类        55          1            1               1               1
柴胡         根茎类        60          2            2               2               1
法半夏       根茎类        78          3            3               3               2
川芎         根茎类        99          4            4               4               3
金樱子       果实类        55          1            1               1               1
胖大海       果实类        66          2            2               2               1
草果         果实类        70          3            3               3               2
桑葚         果实类        78          4            4               4               2
扁豆         果实类        86          5            5               5               3
女贞子       果实类        94          6            6               6               3

(16 行受影响)

下面分别用SQL 2000实现,相对比2005要麻烦的多了。

--ROW_NUMBER在sql 2000中的实现

--利用临时表和IDENTITY(函数)

select sname,num,identity(int,1,1) as rownumber

into #tem

from gg

order by num

select sname,num,rownumber

from #tem

drop table #tem

go

--RANK在sql 2000中的实现

select sname,num,

(select count(1)+1 from gg where num<g.num) as ranknum

from gg g

order by num

go

--DENSE_RANK在sql 2000中的实现

select num,identity(int,1,1) as densenum

into #t

from gg

group by num

order by num

select r.sname,r.num,t.densenum

from gg r join #t t

on r.num=t.num

order by num

drop table #t

go

转载于:https://www.cnblogs.com/kivenhou/archive/2010/11/04/1869326.html

SQL2005中row_number()等函数的用法相关推荐

  1. Oracle中ROW_NUMBER() OVER()函数用法

    Oracle中ROW_NUMBER() OVER()函数用法 1. 说明:ROW_NUMBER() OVER() 函数的作用:分组排序 2. 原理: row_number() over() 函数,ov ...

  2. MapInfo中常用查询函数及用法

    MapInfo中常用查询函数及用法: 函数用途 语法 备注 图层中选点 Str$(obj)="point": Str(String)表示字符串:point表示点: 图层中选线 St ...

  3. python join_详解Python中的join()函数的用法

    函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符) ...

  4. php中msubstr,PHP学习:thinkphp中字符截取函数msubstr()用法分析

    <PHP学习:thinkphp中字符截取函数msubstr()用法分析>要点: 本文介绍了PHP学习:thinkphp中字符截取函数msubstr()用法分析,希望对您有用.如果有疑问,可 ...

  5. matlab fopen函数的用法,matlab中关于fread函数的用法

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:matlab中关于fread函数的用法 问题详情:用fread打开一个时,需要不需要把开放在某个特回答:必须在Matlab可以搜索的 ...

  6. Python:Numpy库中的invert()函数的用法

    Numpy库中的invert()函数的用法 官方解释: Compute bit-wise inversion, or bit-wise NOT, element-wise. Computes the ...

  7. python中time函数用法_python中time tzset()函数实例用法

    在时间的设置方面,为了能够跟系统时间有更好的区分,我们有时会借用一些函数方法来实现.就拿tzset()来说是设置时间的一种方法,其内在的变量依靠TZ的控制,如果没有设置TZ则以系统时间为准.接下来我们 ...

  8. pythonaxis函数_Python中numpy.apply_along_axis()函数的用法

    numpy.apply_along_axis(func, axis, arr, *args, **kwargs): 必选参数:func,axis,arr.其中func是我们自定义的一个函数,函数fun ...

  9. opencv python 中cv2.putText()函数的用法

    opencv python 中cv2.putText()函数的用法 文章目录: 一.快速使用 二.官方文档 三.使用举例 虽然用啦很多次,还是决定记录一下 一.快速使用 cv2.putText(ima ...

最新文章

  1. 详解原生AJAX请求demo(兼容IE5/6)
  2. ios开发之系统信息
  3. Webpack 4 学习09(打包生成html)
  4. RSA javascript加密 lua解密
  5. 分区数据导出功能(页面调整)
  6. 【转载】开源且免费软件包分类列表
  7. 一分钟实现纯CSS全屏滚动特效
  8. Scrapy学习之第一个简单爬取小程序
  9. java foreach break_Java8中的foreach跳出循环break/return
  10. javascript class
  11. Dubbo2.7源码分析-SPI的应用
  12. 2008年下半年软件水平考试之程序员试题分析
  13. 【转】使用Boost Graph library(二)
  14. 工业大数据实施需解决哪些问题
  15. 3.从Paxos到Zookeeper分布式一致性原理与实践---Paxos 工程实践
  16. bzoj 3730 震波 —— 动态点分治+树状数组
  17. linux电脑开机慢,Ubuntu 启动速度慢的解决方法
  18. 2021年12月青少年C/C++软件编程(四级)等级考试试卷及答案解析
  19. DOTCPP:有关1148心得
  20. linux boost库安装

热门文章

  1. 安装卡主_智能温室四周玻璃的安装学问还这么多
  2. java 五子棋项目_Java项目如何实现五子棋小游戏
  3. LeetCode 27.移除元素 思考分析
  4. Python字符串格式:%vs.format
  5. kotlin 查找id_Kotlin程序在矩阵中查找偶数和奇数的频率
  6. 19-Harris角点检测
  7. Python---冒泡排序、选择排序
  8. win下python2,3和pip2,3双版本共存
  9. STL中bitset的用法的整理
  10. 两个栈实现一个队列/两个队列实现一个栈