更正SQL Server数据库中的重复记录
我有一个包含许多记录的表,其中有一个nic列,它应该具有唯一的值。但它包含一些污垢,这意味着那里有一些重复的值 喜欢用户更正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' 是否可能?使用窗口函
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)