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