各位大侠现有个问题需要求教
有个表的结构如下
clum :  id   code  flg
date :  001  00    2
        001  00    2
        001  00    2
        001  00    3
        001  00    3
        001  00    3
        001  00    4
        001  00    4
        001  01    2    
        001  01    2
        001  01    3 
        001  01    4 
        001  01    4 
        001  01    4 
        001  01    4 
想得到一个字段 x 结果如下
clum :  id   code  flg   x
date :  001  00    2     1
        001  00    2     1
        001  00    2     1
        001  00    3     2
        001  00    3     2
        001  00    3     2
        001  00    4     3
        001  00    4     3
        ---------
        001  01    2     1
        001  01    2     1
        001  01    3     2
        001  01    4     3
        001  01    4     3
        001  01    4     3
        001  01    4     3
以id,code作为分组条件
flg为排序条件依次加1。
有没有好的解决办法,谢谢各位大侠啦

解决方案 »

  1.   


    DROP TABLE tt;
    CREATE TABLE tt(ID VARCHAR2(5),code VARCHAR2(5),flg NUMBER(2));
    insert into tt values('001','00',2 );
    insert into tt values('001','00',2 );
    insert into tt values('001','00',2 );
    insert into tt values('001','00',3 );
    insert into tt values('001','00',3 );
    insert into tt values('001','00',3 );
    insert into tt values('001','00',4 );
    insert into tt values('001','00',4 );
    insert into tt values('001','01',2 );
    insert into tt values('001','01',2 );
    insert into tt values('001','01',3 );
    insert into tt values('001','01',4 );
    insert into tt values('001','01',4 );
    insert into tt values('001','01',4 );
    insert into tt values('001','01',4 );
    SELECT * FROM tt;
    SELECT tt.*,dense_rank() over(order by flg) x FROM tt;
    输出:
    001 01 2 1
    001 00 2 1
    001 00 2 1
    001 01 2 1
    001 00 2 1
    001 01 3 2
    001 00 3 2
    001 00 3 2
    001 00 3 2
    001 01 4 3
    001 01 4 3
    001 01 4 3
    001 01 4 3
    001 00 4 3
    001 00 4 3
      

  2.   

    select a.*,dense_rank() over(partition by id,code order by flag ) x
     from a
      

  3.   


    DROP TABLE tt;
    CREATE TABLE tt(ID VARCHAR2(5),code VARCHAR2(5),flg NUMBER(2));
    insert into tt values('001','00',2 );
    insert into tt values('001','00',2 );
    insert into tt values('001','00',2 );
    insert into tt values('001','00',3 );
    insert into tt values('001','00',3 );
    insert into tt values('001','00',3 );
    insert into tt values('001','00',4 );
    insert into tt values('001','00',4 );
    insert into tt values('001','01',2 );
    insert into tt values('001','01',2 );
    insert into tt values('001','01',3 );
    insert into tt values('001','01',4 );
    insert into tt values('001','01',4 );
    insert into tt values('001','01',4 );
    insert into tt values('001','01',4 );
    SELECT * FROM tt;
    SELECT tt.*,dense_rank() over(PARTITION BY id,code order by flg) x FROM tt;
    输出:
    001 00 2 1
    001 00 2 1
    001 00 2 1
    001 00 3 2
    001 00 3 2
    001 00 3 2
    001 00 4 3
    001 00 4 3
    001 01 2 1
    001 01 2 1
    001 01 3 2
    001 01 4 3
    001 01 4 3
    001 01 4 3
    001 01 4 3
      

  4.   

    谢谢  oracledbalgtu,hebo2005 应该就是这个了 今天在公司也用这个函数不过写成
    SELECT tt.*,dense_rank() over(PARTITION BY id,code order by id,code,flg) x FROM tt;
    结果出来得 是
    001    00    2    1
    001    00    2    1
    001    00    2    1
    001    00    3    1
    001    00    3    1
    001    00    3    1
    001    00    4    1
    001    00    4    1
    001    01    2    1
    001    01    2    1
    001    01    3    1
    001    01    4    1
    001    01    4    1
    001    01    4    1
    001    01    4    1
    呵呵  明天到公司再试试 谢谢 大家啊