论坛首页 综合技术版 Database

为分组查询添加一列按分组字段从1开始计数的序号列

浏览 765 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-01-24


*************************************************************************************************
// date   2008-1-24
// auth   mircle

//  qq     83529101

//msn     mircle_wang@hotmail.com
// class  oracle
**************************************************************************************************
(部门--人员 一对多 一个部门可以有多个员工,同一个部门内员工不重名)
employee 表

部门人员
Atom
Ajohn
Amary
  
Blongman
Bsolong
  
Ctomy
Clincon



----------------------------------------------------------------------- -----------------------
增加一列序号 :要求 序号要按部门不同 从1开始计数
要得到的结果如下
-------------------------------------------------------------------------------------------------

部门人员序号
Ajohn1
Amary2
Atom3
   
Blongman1
Bsolong2
   
Clincon1
Ctomy2


-------------------------------------------------------------------------------------------------

 oracle sql:
select 部门,人员,(select sum(1) from employee emA
                             where  emA.部门=emB.部门
                              and    emA.人员<=emB.人员) as 序号
from employee emB
order by emB.部门,emB.人员 
 



这个sql智慧的地方是在:

 

计算小于它的有多少条记录来计算它的序号
---------------------------------------------------------------------------------------------------

 

   
时间:2008-01-24
巧了,我正好刚用了类似的方式计算序号。
不过我用的不是sum(1),我用的是count(*),会不会更直观点?
   
0 请登录后投票
时间:2008-01-29
使用现有的oracle函数才体现你的智慧,sorry,请原谅我说的话。你那句sql你在大数据量上执行一下就知道了,很快就会游标超出最大值。
告诉你最简单的方式:
select T.*, rank()over(partition by DEPT order by NAME desc)
from employee t
   
0 请登录后投票
时间:2008-02-18
引用
yerba 20 天前
使用现有的oracle函数才体现你的智慧,sorry,请原谅我说的话。你那句sql你在大数据量上执行一下就知道了,很快就会游标超出最大值。
告诉你最简单的方式:
select T.*, rank()over(partition by DEPT order by NAME desc)
from employee t

没关系的 ! 我写出来只是想提供一个我知道的方法,你告诉了我一个更好的方法
我还不知道怎么感谢你呢 :)
   
0 请登录后投票
时间:2008-02-18
引用
yerba 20 天前
使用现有的oracle函数才体现你的智慧,sorry,请原谅我说的话。你那句sql你在大数据量上执行一下就知道了,很快就会游标超出最大值。
告诉你最简单的方式:
select T.*, rank()over(partition by DEPT order by NAME desc)
from employee t

没关系的 ! 我写出来只是想提供一个我知道的方法,你告诉了我一个更好的方法
我还不知道怎么感谢你呢 :)
   
0 请登录后投票
时间:2008-03-10
1.rank() over()
序号会出现跳号。如1,2,2,4,5
2.dense_rank() over()
序号不会出现跳号。如1,2,2,3,4
3.row_number() over()
不会出现相同顺序号。如1,2,3,4,5
   
0 请登录后投票
论坛首页 综合技术版 Database

跳转论坛:
JavaEye推荐