更正SQL Server数据库中的重复记录

更正SQL Server数据库中的重复记录,sql,sql-server,sql-server-2008,stored-procedures,Sql,Sql Server,Sql Server 2008,Stored Procedures,我有一个包含许多记录的表,其中有一个nic列,它应该具有唯一的值。但它包含一些污垢,这意味着那里有一些重复的值 喜欢用户 id = 567 has nic = '786-786' 而且 id = 897 has nic = '786-786'. 我想写一个存储过程,它应该删除那些重复项,并在末尾附加1 id = 567 , nic= '786-786' id = 788 , nic = '786-786-1' id = 2344, nic = '786-786-2' 是否可能?使用窗口函

我有一个包含许多记录的表,其中有一个nic列,它应该具有唯一的值。但它包含一些污垢,这意味着那里有一些重复的值

喜欢用户

id = 567 has nic = '786-786' 
而且

id = 897 has nic = '786-786'.
我想写一个存储过程,它应该删除那些重复项,并在末尾附加1

id = 567 , nic= '786-786'
id = 788 , nic = '786-786-1'
id = 2344, nic = '786-786-2'

是否可能?

使用窗口函数/分析函数,例如

按Nic分区的行数,按ID排序

类似于

UPDATE B
SET B.Nic = C.NewNic
FROM Foo B
INNER JOIN (SELECT ID, NIC + '-'  + cast(Row_number() 
over (partition by NIC order by ID ) as varchar(20)) as newNic
FROM FOo) C
 on C.ID = B.ID
这会给你

id = 567 , nic= '786-786-1'
id = 788 , nic = '786-786-2'
id = 2344, nic = '786-786-3'
您可以始终执行case语句,当行为1时,如果必须将第一行保留为-1,则不显示并减去1

导致:

ID  NIC
567 786-786
897 786-786-1
和一个显示多个nic的

ID  NIC
567 786-786
600 786-786-1
897 786-786-2
10  786-787
12  786-787-1
900 786-787-2
对于tsql

您可以通过简单的更新来完成此操作,请尝试以下查询:

select id, nic, rank() over (partition by nic order by id)
from your_table as t1
where exists(select 1 from your_table where nic = t1.nic and id <> t1.id)

您可以生成更新查询,或将更新字符串作为此选择的字段返回。阅读关于

不工作,在内部连接第2行和第3行给出语法错误“as`。标记mysql。。。对于您需要的查询数据库引擎,是MSSQL还是mysql?这是MSSQL引擎。
select id, nic, rank() over (partition by nic order by id)
from your_table as t1
where exists(select 1 from your_table where nic = t1.nic and id <> t1.id)