首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

批改重复列

2013-02-18 
修改重复列[解决办法]SELECT id,NAMELEFT(NAME,1)+ISNULL(NULLIF(RTRIM(ROW_NUMBER() OVER (PARTITION BY

修改重复列

                            
[解决办法]
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呢
否则就只用游标,如果数据量比较大,估计会慢死人的

热点排行
Bad Request.