有一个表记录如下:myNo     name
100001   张三
100002   李四
100003
100999
100999
100999
100999
200001
200002
200004
200999
200999  周无myNo前三位表示单位号,后三位是部门内的序号,由于记录删除和添加(删除可能导致内部序号  不连续;添加我们默认的内部序号就是999)我们就出现了上面这样的情况,请问能不能做一个函数,实现:
内部序号不等于999的,不变动;内部序号为999的,全部重新排序,并使得部门所有成员的内部序号都有序。谢谢

解决方案 »

  1.   

    SQL> select * from tmp;
     
          MYNO NAME
    ---------- ----
        100001 张三
        100002 李四
        100003 
        100999 
        100999 
        100999 
        100999 
        200001 
        200002 
        200004 
        200999 
        200999 周五
     
    12 rows selected
     
    SQL> 
    SQL> select myNo,name
      2    from(select myNo,name from tmp where substr(myNo,4,3) <> '999' order by myNo)
      3  union all
      4  select myNo,name
      5    from(select myNo,name from tmp where substr(myNo,4,3) = '999' order by myNo)
      6  ;
     
          MYNO NAME
    ---------- ----
        100001 张三
        100002 李四
        100003 
        200001 
        200002 
        200004 
        100999 
        100999 
        100999 
        100999 
        200999 
        200999 周五
     
    12 rows selected
      

  2.   

    要处理的数据:
    myNo name
    100001 张三
    100002 李四
    100003  1
    100999  2
    100999  3
    100999  4
    100999  5
    200001  6
    200002  7
    200004   8
    200999  9
    200999 周无
    处理结果myNo name
    100001 张三
    100002 李四
    100003  1
    100004  2
    100005  3
    100006  4
    100007  5
    200001  6
    200002  7
    200004  8
    200003  9
    200005 周无能实现这样的一个结果不?