一张50万的数据
staffid  staffname  passwd
0000001  张三       
0000002  李四      
0000003  王五
0000004  张三
staffname有可能重名,passwd生成策略是staffname的中文转全拼+001,但如果有重复的,就再+1
上述转换结果是:
staffid  staffname  passwd
0000001  张三       zhangsan001 
0000002  李四       lisi001
0000003  王五       wangwu001
0000004  张三       zhangsan002
请问各位高手,怎么实现这个功能,才能保证效率最块。谢谢。100分相送。

解决方案 »

  1.   

    1,先生成带有重复数据的passwd;
    2,使用goup by 。。having count(*)取得临时表,(因为重名的数据毕竟是少数,你要是在开始生成数据的时候,就去验证是否有重复名字,那等于做了过多的子查询);
    3,根据得到的临时表,去update重复的数据。
      

  2.   

    张三       zhangsan001 
    没有字典表 这个恐怕实现不了
      

  3.   

    这个还是很好办的 ,假设你的表是 table1
    第一步  建立临时表 (把重复的放在临时表中)
    create table ttmp_1 as select * from table where staffname in (
    select staffname from table group by staffname having count(staffname)>1) order by staffid,staffname
      

  4.   

    第二步  需要编号  passwd,这个需要写一个declare  来完成
    提供一个思路 先建立一个变量 a   
    然后在 游标中的第一条记录 中的  staffname 赋值进去  .
    然后循环读取 游标中记录 
    如果  staffname 相同就 update 后面的 passwd ,不同就 重新赋值 然后继续循环update
      

  5.   

    第三步 就更简单了  
    update table1  就可以了
      

  6.   

    网上有现成的取汉语拼音的函数,假设命名为f_get_chinese()。剩下的工作可以调用row_number()over()再加上一个简单的拼接来实现。