有这样一个表: 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就可以了