更改列中的重复值

Change duplicate value in a column

能否请您告诉我 SQL query 可以使用什么来更改 table 一栏中的重复项? 我发现了这些重复项:

SELECT Model, count(*) FROM Devices GROUP BY model HAVING count(*) > 1;

我一直在寻找关于如何更改其中一个重复值的信息,但不幸的是我没有找到适合自己的特定选项,而且更多的信息都是通过删除重复值行来填充的,我不需要。 SQL 一点都不强。我寻求帮助。非常感谢。

命令后:

SELECT Model, count (*) FROM Devices GROUP BY model HAVING count (*)> 1;

我得到结果:

  • 1895 行 = NULL;
  • 3383 行具有重复值;
  • 所有这些值都是 1243。

应用命令后:

update Devices set
  Model = '-'
where id not in
  (select
     min(Devices .id)
   from Devices 
   group by Devices.Model)

我更改了 4035 行。 如果你数一数,结果是 (3383 + 1895) = 5278 - 1243 = 4035 看起来一切都很合适,结果很合适,很有效。

使用exists如下:

update d 
   set Model = '-'
  from Devices d
where exists (select 1 from device dd where dd.model = d.model and dd.id > d.id)

您可以轻松地使用 Window 函数,例如 ROW_NUMBER() 和分区选项,以便按 Model 列分组以消除重复项,然后选择第一行(rn=1) 从子查询返回如

WITH d AS
(
 SELECT *, ROW_NUMBER() OVER (PARTITION BY Model) AS rn
   FROM Devices 
)
SELECT ID, Model -- , and the other columns
  FROM d
 WHERE rn = 1 

Demo