SQL - 更新:重复条目的多重重命名

SQL - Update: multi renaming of repeated entries

在 Oracle 11 中我有这样的 table

ID  Name
--------
1   Jim
2   John
3   Jim
4   Sue
5   Marc
6   Jim

现在我必须将名称修改为唯一;重复项将获得后缀。所以 table 应该看起来像

ID  Name
--------
1   Jim_1
2   John
3   Jim_2
4   Sue
5   Marc
6   Jim_3

找到重复项是比较容易的部分,但是是否有 auto_rename 重复项并计算它们的例程(片段)?

感谢您的建议(初学者水平..)

这是一种选择;查看代码中的注释。

SQL> with test (id, name) as
  2    -- sample data; you don't type that as you already have it in a table
  3    (select 1, 'Jim'  from dual union all
  4     select 2, 'John' from dual union all
  5     select 3, 'Jim'  from dual union all
  6     select 4, 'Sue'  from dual union all
  7     select 5, 'Marc' from dual union all
  8     select 6, 'Jim'  from dual
  9    )
 10  -- this is what you might need
 11  select id,
 12         name || case when cnt > 1 then '_' || rn end as name
 13  from (-- count each name's appearance and find its row number
 14         select id, name,
 15          row_number() over (partition by name order by id) rn,
 16          count(*) over (partition by name) cnt
 17        from test
 18       )
 19  order by id;

        ID NAME
---------- ------------------------------
         1 Jim_1
         2 John
         3 Jim_2
         4 Sue
         5 Marc
         6 Jim_3

6 rows selected.

SQL>