ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 给非空记录增加行号

给非空记录增加行号

原创 Linux操作系统 作者:壹頁書 时间:2013-11-21 21:51:01 0 删除 编辑

  1. create table t(a varchar2(10));

  2. insert into t values('b');
  3. insert into t values(null);
  4. insert into t values(null);
  5. insert into t values('a');
  6. insert into t values('e');
  7. insert into t values(null);
  8. insert into t values('c');
  9. insert into t values('d');
要求按自然顺序查出所有记录,并为每行非空记录加一个行号。
形如


子查询 O(n):
  1. select t3.a,decode(t3.a,null,null,num) num from(
  2.     select t2.a,sum(t2.c) over(order by t2.r) num from (
  3.         select rownum r,decode(t.a,null,null,1) c, a from t
  4.     )t2
  5. )t3;
外连接O(2n):

  1. select t2.a,t2.r from
  2. (select a,rownum r from t) t1
  3. left join
  4. (select a,rownum r from t where a is not null) t2
  5. on t1.a=t2.a order by t1.r;
王工的版本
  1. select t.a,nvl2(a,count(a) over(order by rownum),'') num from t;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29254281/viewspace-777269/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 维护树状数据
请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    621
  • 访问量
    5938179