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

数据库反复替换

2012-12-21 
数据库重复替换有一个userinfo 表,把name字段有重复的值替换成原先name+[1-n]比如 name中有重复n个a 替

数据库重复替换
有一个userinfo 表,把name字段有重复的值替换成原先name+[1-n]
比如 name中有重复n个"a" 替换成a1,a2 , a3, a4, a5...an
[最优解释]
;with cte as
(select *,  Case (ROW_NUMBER() over(partition by name order by GetDate())-1) when 0 then Name else Name+rtrim(ROW_NUMBER() over(partition by Name order by GetDate())-1) end  as nID from userinfo)

update cte set name=nID
[其他解释]
select *,name+rtrim(select row_number() over(partition by name order by getdate())) from userinfo 
[其他解释]
不好意思,更正一下,当只要不重复的时候,直接显示原先的值的!要得到结果是

比如 name中有重复n个"a" 替换成a, a1,a2 , a3, a4, a5...an 


并更新原来的表
[其他解释]
;with cte as
(select *, name + CAST( ROW_NUMBER() over(partition by name order by GetDate()) as varchar(5) ) as nID from userinfo)

update cte set name=nID
[其他解释]
可以用一条语句实现吗?
[其他解释]

引用:
;with cte as
(select *, name + CAST( ROW_NUMBER() over(partition by name order by GetDate()) as varchar(5) ) as nID from userinfo)

update cte set name=nID


当只有一条记录的时候,或是第一条记录的时候,不做更新的!a,a1,a2....
[其他解释]
引用:
;with cte as
(select *,  Case (ROW_NUMBER() over(partition by name order by GetDate())-1) when 0 then Name else Name+rtrim(ROW_NUMBER() over(partition by Name order by GetDate())-1) end  as nID from ……

可以用同一条语句实现吗?
[其他解释]
引用:
;with cte as
(select *,  Case (ROW_NUMBER() over(partition by name order by GetDate())-1) when 0 then Name else Name+rtrim(ROW_NUMBER() over(partition by Name order by GetDate())-1) end  as nID from ……


可以了,非常感谢!

热点排行