修改重复列
[解决办法]
SELECT id,NAME=LEFT(NAME,1)+ISNULL(NULLIF(RTRIM(ROW_NUMBER() OVER (PARTITION BY LEFT(NAME,1) ORDER BY id)-1),'0'),'')
FROM [testx1]
[解决办法]
你这个貌似只能用循环了,有个id再,顺序不好改变。
[解决办法]
select id ,name+case when c=0 then '' else cast(c as varchar(4)) end from
( select id, name, (select count(*) from testx1 as b where a.name=b.name and a.id>b.id ) as c
from testx1 as a ) as a
[解决办法]
create function fn_split(@name varchar(200))
returns varchar(200)
as
begin
declare @sub varchar(200)
declare @index int
set @index=1
set @sub=substring(@name,@index,1)
while 1=1
begin
if(@sub='0' or @sub='1' or @sub='2' or @sub='3' or @sub='4' or @sub='5' or @sub='6' or @sub='7' or @sub='8' or @sub='9')
break
set @index =@index + 1
if(@index-1=len(@name))
break
set @sub=substring(@name,@index,1)
end
return substring(@name,1,@index-1)
end
;with t as
(
select id,name,(select count(1) from [testx1] a where a.id<=b.id and dbo.fn_split(a.name)=dbo.fn_split(b.name)) number from [testx1] b
)
update t set name=dbo.fn_split(name)+convert(varchar(20),number-1) where number<>1
你没给出更新的规则,这是最简单的更新了
因为如果有A,A,A1,A1,A2,A2这咋弄?凌乱
A,A3,A1,A4,A2,A5?
还不如A,A1,A2,A3,A4,A5呢
否则就只用游标,如果数据量比较大,估计会慢死人的