SQL 获取顺序号的四种方法_IDENTITY/RANK/DENSE_RANK/ROW_NUMBER

SQL 获取顺序号的四种方法_IDENTITY/RANK/DENSE_RANK/ROW_NUMBER

1.最早知道的是用 IDENTITY(int,   1,   1) 塞到临时表中,再与原表中数据相

 SELECT  CASENO,SEQNUM , IDENTITY(int,   1,   1)   AS   [ID]  into #tmptest FROM  table where   PO='888'

 order by CASENO,CAST(SEQNUM AS INT)

虽然这种方式有点麻烦...

2.后来知道了Dense_rank() over (order by colname) 

---才发现原来可以不用塞临时表

3.再后来才知有个更历害的Row_number() over (partition by colname1 order by colname2)

---发觉原来partition不止它有,它们也可以有:

上网查询发现了 后三种排序的区别:
原文:http://blog.csdn.net/winer2008/article/details/4283539

rank,dense_rank,row_number使用和区别

rank,dense_rank,row_number区别

一:语法(用法):
     rank() over([partition by col1] order by col2) 
     dense_rank() over([partition by col1] order by col2) 
     row_number() over([partition by col1] order by col2) 
     其中[partition by col1]可省略。

二:区别
    三个分析函数都是按照col1分组内从1开始排序
    
    row_number() 是没有重复值的排序(即使两天记录相等也是不重复的),可以利用它来实现分页
    dense_rank() 是连续排序,两个第二名仍然跟着第三名
    rank()       是跳跃拍学,两个第二名下来就是第四名

为怕再区分不清,摘抄如下: 

1.rank

SQL> select name,score,rank() over(partition by name order by score) tt from t;
 
NAME       SCORE         TT
---------- ----- ----------
数学          67          1
数学          77          2
数学          78          3
数学          88          4
数学          99          5
语文          60          1
语文          70          2
语文          80          3   <----
语文          80          3   <----
语文          90          5

2.dense_rank
SQL> select name,score,dense_rank() over(partition by name order by score) tt from t;
 
NAME       SCORE         TT
---------- ----- ----------
数学          67          1
数学          77          2
数学          78          3
数学          88          4
数学          99          5
语文          60          1
语文          70          2
语文          80          3   <----
语文          80          3   <----
语文          90          4
3.row_number

SQL> select name,score,row_number() over(partition by name order by score) tt from t;
 
NAME       SCORE         TT
---------- ----- ----------
数学          67          1
数学          77          2
数学          78          3
数学          88          4
数学          99          5
语文          60          1
语文          70          2
语文          80          3  <----
语文          80          4  <----
语文          90          5

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值