现在有这样一张表
id,name
001 abc
004 abc
005 ab
007 abc
008 dc
045 ab
大概是这样记录,ID这一列不重复,也没有连续,name这一列有重复,现在需要将name这一列变为不重复,但是只是近用重复的后面第一个不变,其他的要加上1,2,3这样区别例如:
id,name
001 abc
004 abc1
005 ab
007 abc2
008 dc
045 ab1
这个需要怎么做呀
id,name
001 abc
004 abc
005 ab
007 abc
008 dc
045 ab
大概是这样记录,ID这一列不重复,也没有连续,name这一列有重复,现在需要将name这一列变为不重复,但是只是近用重复的后面第一个不变,其他的要加上1,2,3这样区别例如:
id,name
001 abc
004 abc1
005 ab
007 abc2
008 dc
045 ab1
这个需要怎么做呀
id,name
001 abc
004 abc
005 ab
007 abc
008 dc
045 ab
*/
if OBJECT_ID('t1') is not null
drop table t1
create table t1 (id varchar(10),name varchar(10))
insert t1
select '001','abc' union all
select '004','abc' union all
select '005','ab' union all
select '007','abc' union all
select '008','dc' union all
select '045','ab'
go
--select id,name,RANK()over(partition by name order by name) from t1
;with cte (rowid,id,name)
as
(
select ROW_NUMBER()over(PARTITION by name order by id),id,name from t1
)
select id,(case rowid-1 when 0 then name else name+convert(varchar,rowid-1) end) as name from cte
order by id
/*
id name
-- ----
001 abc
004 abc1
005 ab
007 abc2
008 dc
045 ab1
*/
go
drop table t1
then name else name+convert(varchar,row_number() over(partition by name order by id)-1) end)
from #TT order by id
)update a set name = name + case when rn =0 then '' else rn end