ITPub博客

一个关于分区的帖子

原创 Linux操作系统 作者:foxmile 时间:2007-12-12 11:59:02 0 删除 编辑

想给重复值的字段加上数字后缀,使其唯一。用sql能否实现?怎么实现?

想给重复值的字段加上数字后缀,使其唯一。用sql能否实现?怎么实现?

表现状:有唯一主键pk,有一个非主键字段col1,现要使用col1,使col1唯一。col1是字符型的。
pk col1
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 1
9 2
10 2
11 2
12 2
13 3
14 3
15 3
16 3
17 3
18 3
19 3
20 4
21 5
22 5
23 6
24 6
25 6
26 7
27 7
28 7
29 7
30 7
31 7

需求:比如col1=0想实现其数值变成
0_1
0_2
0_3
0_4
0_5
0_6
0_7
其他的类似。用sql语句应该怎么实现?谢谢各位。
看来是太简单,没人愿意回答你了哦!
col1||'_'||to_char(pk)即可
如果你要每个值都从1开始排序,看看oracle的新函数吧
支持楼上,也可以用LPAD粘贴函数.同理之.
用這個試試
update table t set t.col1 = t.col1 || "_" || (
select vno from (
select pk,ROW_NUMBER() OVER (PARTITION BY pk order by pk) vno
from table ) k where k.pk=t.pk)
ROW_NUMBER() OVER (PARTITION BY pk order by pk)
楼上的这个是不是应该按照col1来分段阿,pk版本来就是唯一的按照他来取row_number有何意义
楼上的方法很好,不过错了,应该把OVER (PARTITION BY pk order by pk)的pk改为col1,不然添加的后缀将全是1,以下代码应该能完全满足楼主的要求,
update tab t
set t.col1 = t.col1 || '_'|| (select vno
from (select pk,ROW_NUMBER() OVER (PARTITION BY col1 order by col1) vno
from tab ) k
where k.pk=t.pk)
“勿以善小而不为”,再简单的问题都不是随便就能解决的,都有他存在的价值。

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

请登录后发表评论 登录
全部评论

注册时间:2007-12-10

  • 博文量
    107
  • 访问量
    196358