请问如何实现如下效果,其中num默认为1
id  name   num
1    aa     1     
2    aa     1
3    bb     1
4    bb     1
5    bb     1
6    cc     1如何更新成下面的格式 ,其中num,根据name的内容相同而自增
id  name   num
1    aa     1     
2    aa     2
3    bb     1
4    bb     2
5    bb     3
6    cc     1

解决方案 »

  1.   

    update yourtable a
       set num = (select RN
                    from (select id,
                                 name,
                                 row_number() over(partition by name order by id) RN
                            from yourtable) t
                   where a.id = t.id
                     and a.name = b.name)
      

  2.   

    SQL> select * from t;        ID NAME              NUM
    ---------- ---------- ----------
             1 aa                  1
             2 aa                  1
             3 bb                  1
             4 bb                  1
             5 bb                  1
             6 cc                  16 rows selectedSQL> 
    SQL> update t
      2     set num = (select rn
      3                  from (select id,
      4                               row_number() over(partition by name order by name) rn
      5                          from t) b
      6                 where t.id = b.id);6 rows updatedSQL> select * from t;        ID NAME              NUM
    ---------- ---------- ----------
             1 aa                  1
             2 aa                  2
             3 bb                  1
             4 bb                  2
             5 bb                  3
             6 cc                  16 rows selected
      

  3.   

    update c t
       set t.num = (select a.rn
                      from (select c.id,
                                   row_number() over(partition by c.name order by c.id) rn
                              from c) a
                     where t.id = a.id)
      

  4.   


    SQL> select * from test;        ID NAME            NUM
    ---------- -------- ----------
             1 aa                1
             2 aa                1
             3 bb                1
             4 bb                1
             5 bb                1
             6 cc                16 rows selectedSQL> 
    SQL> select t.id, t.name, t.rn num
      2    from test a,
      3         (select id, name, row_number() over (partition by name order by id) rn from test) t
      4   where t.id = a.id;        ID NAME            NUM
    ---------- -------- ----------
             1 aa                1
             2 aa                2
             3 bb                1
             4 bb                2
             5 bb                3
             6 cc                16 rows selectedSQL>