Sql 如果发现,更新第二行中的重复值
我遇到了一个问题。我有一个表,其中一些行将复制一列数据。但是,其他列是唯一的。 我所追求的是当它检测到这是第二行,而前一行可能已经具有相同的列值时,在该实例中,只需向该列值添加一些数字Sql 如果发现,更新第二行中的重复值,sql,sql-server,Sql,Sql Server,我遇到了一个问题。我有一个表,其中一些行将复制一列数据。但是,其他列是唯一的。 我所追求的是当它检测到这是第二行,而前一行可能已经具有相同的列值时,在该实例中,只需向该列值添加一些数字 if object_id('tempdb..#tempt') is not null drop table #tempt; create table #tempt( cmpName varchar(50), cmpCode varchar(50) ) insert into #tempt select '
if object_id('tempdb..#tempt') is not null drop table #tempt;
create table #tempt(
cmpName varchar(50),
cmpCode varchar(50)
)
insert into #tempt select 'cmp-ABC234FG Ont','252750023862545';
insert into #tempt select 'cmp-XDDF34FG Ont','252750057762511';
insert into #tempt select 'cmp-POC624AG Ont','252750057762789';
insert into #tempt select 'cmp-ABC234FG Ont','252750057762511';
cmpName cmpCode
cmp-ABC234FG Ont 252750023862545
cmp-ABC234FG Ont 252750057762511
cmp-POC624AG Ont 252750057762789
cmp-XDDF34FG Ont 252750057762511
在上面的示例中,int first 2 rows列cmName具有重复的值。我想要的是,第二行的值应该附加任何字符,这样它就会成为一个唯一的行
cmpName cmpCode
cmp-ABC234FG Ont 252750023862545
cmp-ABC234FG Ont-2 252750057762511
有什么好心人能帮我吗?
提前感谢正如astentx所述,您需要一列来排序或决定要更新哪一行。在本例中,我使用了
cmpCode
:
if object_id('tempdb..#tempt') is not null drop table #tempt;
create table #tempt(
cmpName varchar(50),
cmpCode varchar(50)
)
insert into #tempt select 'cmp-ABC234FG Ont','252750023862545';
insert into #tempt select 'cmp-XDDF34FG Ont','252750057762511';
insert into #tempt select 'cmp-POC624AG Ont','252750057762789';
insert into #tempt select 'cmp-ABC234FG Ont','252750057762511';
;with cte as(
select row_number() over(partition by cmpName order by cmpCode) rn,
*
from #tempt
)
update cte
set cmpName = concat(cmpName,'-',rn)
where rn > 1
select *
from #tempt
这将考虑到可能有两个以上的记录具有相同的
cmName
值。SQL表中没有行顺序,因此请提供将某些行称为第一行,将某些行称为第二行的排序条件。使用游标可以简单地做到这一点,但速度会变慢,不建议这样做。如果您需要,那么我可能会发布它。cmpName-rn
将创建一个新组,该组可能已经存在于#temp
表中的其他行的该列中。如果这不是一次性更新,当然需要考虑一些问题。如果可能出现这样的情况,那么您可能需要考虑使用某种GUID,而不是rn
。