我有以下查询,该查询返回在SQL Server上运行的重复项。因此,我需要编写一个查询,该查询将基于选择查询(例如,将重复信息复制到)来更新电子邮件地址的第二个实例 import@rohnis.com到imports@rohnis.com.duplicate。如果是info@eps.ws,则为info@eps.ws.duplicate。所以基本上是后缀 带有重复字样的电子邮件地址。可以是任何电子邮件地址
查询以搜索重复项
SELECT ta.Id
,ta.Email
,ta.ClientCompanyId
FROM [IdentityDB_CSR].[dbo].[User] ta
WHERE (SELECT COUNT(*)
FROM [IdentityDB_CSR].[dbo].[User] ta2
WHERE ta.Email=ta2.Email
AND ta.ClientCompanyId=ta2.ClientCompanyId)>1
查询的输出
查询更新
update [IdentityDB_CSR].[dbo].[User]
set Email = 'info@eps.ws.duplicate'
where id = 87183
答案 0 :(得分:2)
您可以使用可更新的CTE:
with cte as (
select
Email,
row_number() over(partition by Email, ClientCompanyId order by id desc) rn
from [IdentityDB_CSR].[dbo].[User]
)
update cte
set Email = Email + '.duplicate'
where rn > 1
这会将重复项标识为共享相同的Email
和ClientCompanyId
的记录。 id
最高的记录保持不变,而对于其他记录,我们在'.duplicate
的末尾添加Email
。