当前位置: 代码迷 >> Sql Server >> SQL中重复数据怎的更新
  详细解决方案

SQL中重复数据怎的更新

热度:3   发布时间:2016-04-24 10:20:56.0
SQL中重复数据怎样更新!
有这样一个表: a 它里面的工号有重复现象,现在想将重复工号的后两位更改一下(前八位保持不变),生成新的工号插入到表a,并且要验证新生成工号在整个工号里面不在重复,如果重复的话,重新生成一个。重复值有的是2个,有的是3个,有的是4个,有的是5个,5个以上相同工号是没有的,想问问更新语句应该怎么写?
 序号      工号(10位)      姓名
1          1000211234        王建
2          1000215678        李健
3          1000214231        王林
4          1000211234        王荣
5          1000211234        张是
6           1000215678      唐娟
7          1001214423       张军
8         1001214423        王建

------解决方案--------------------
--drop table tb
create table tb (序号 int ,工号 char(10),姓名 varchar(7))
insert into tb 
select'1','1000211234','王建'union all                             
select'2','1000215678','李健'union all                             
select'3','1000214231','王林'union all                             
select'4','1000211234','王荣'union all                             
select'5','1000211234','张是'union all                             
select'6','1000215678','唐娟'union all                             
select'7','1001214423','张军'union all                             
select'8','1001214423','王建'                                      
go
select * from tb
go

with cte  as
(
select *,ROW_NUMBER() over (partition  by 工号 order by 序号) as rn from tb
)
update  cte   set 工号= Cast(工号 as numeric(16,0))+ cast (rn as int)-1

select * from tb

--序号 工号 姓名
--1 1000211234 王建
--2 1000215678 李健
--3 1000214231 王林
--4 1000211235 王荣
--5 1000211236 张是
--6 1000215679 唐娟
--7 1001214423 张军
--8 1001214424 王建

------解决方案--------------------
先要有一个列例如UID为IDENTITY,没有就先创建一个
SELECT * FROM XXX WHERE 工号 IN (
SELECT 工号 FROM XXX GROUP BY  工号 HAVING COUNT(工号)>1)
把那些UID的工号UPDATE就可以了
  相关解决方案