2015-11-03 89 views
0

SQL中是否可以选择列中的值然后重命名重复的值? (假设最大的一个可能重复的只)SQL - 在列中选择相同的值,然后重命名它们

比方说,我有一个表..

| id | name | 0or1_id | 
| 0 | Eddy | 0  | 
| 1 | Allan | 0  | 
| 2 | Eddy | 1  | 
| 3 | Allan | 1  | 

我能做些什么,查询,使它象这样?

| id | name  | 0or1_id | 
| 0 | Eddy  | 0  | 
| 1 | Allan  | 0  | 
| 2 | Eddy-copy | 1  | 
| 3 | Allan-copy | 1  | 
+2

..你已经标记为特定MySQL和SQL server..be是不同的一个... –

+2

有什么目的,这背后? –

回答

0

假设你想真正改变数据,使用update

update t join 
     (select name, count(*) as cnt, min(id) as minid 
     from t 
     group by name 
     having cnt > 1 
     ) tt 
     on t.name = tt.name and t.id <> tt.minid 
    set name = concat(name, '-copy'); 

如果你只想要一个select,那么逻辑非常相似。

0

这将在SQL Server的工作..

select id , name ,0or1_id from (
select id , name ,0or1_id ,row_number() over (partition by name order by id) as rnm 
from table)z1 
where rnm =1 
union 
select id , name || '- Copy' as new_name ,0or1_id from (
select id , name ,0or1_id ,row_number() over (partition by name order by id) as rnm 
from table)z2 
where rnm > 2 
+1

这在MySQL中不起作用。 –

+0

@ GordonLinoff ..这就是为什么提到SQL Server。没有看到标签被更改为MySQL。 –

相关问题