SQL:如何将ID附加到具有重复值的行

时间:2008-11-26 05:54:27

标签: sql duplicates

我有一个包含一些重复行的表。我想修改重复的行,如下所示。

在:

id     col1
------------
1      vvvv
2      vvvv
3      vvvv

后:

id     col1
------------
1      vvvv
2      vvvv-2
3      vvvv-3

Col1附加一个连字符,值为id列。

4 个答案:

答案 0 :(得分:7)

此SQL只会更新重复项,而不会更新ID最低的那些:

update tbl
  set col1 = col1 + '-' + convert(varchar, id)
  where exists(select * from tbl t where t.col1 = tbl.col1 and t.id < tbl.id)

答案 1 :(得分:2)

在Oracle语法中检查IN。查询未经过测试

update table1 set
col1 = col1 || id
where
id not in (
select min(id) from table1
groupby col1
)

答案 2 :(得分:0)

您可以使用sproc和游标执行此操作。我认为在任何合理的选择查询中都不可能。

答案 3 :(得分:0)

您可以通过两步流程完成此操作,尽管SQL向导可能会对此进行修改,以便在一个步骤中为您提供解决方案。

首先,您需要获取所有重复值。这是一个SQL查询,它将执行此操作:

SELECT     COUNT(*) AS NumberOfDuplicates, col1
FROM         Table1
GROUP BY col1
HAVING      (COUNT(*) > 1)

这将为您提供一个结果集,列出重复数量和重复值。

在第2步中,您将循环遍历此结果集,获取col1值,返回包含该值的所有记录以及(可能使用循环计数器变量)根据您的示例更改值。

注意:您实际上不需要返回重复数量来实现目标,但它可以帮助您测试查询并确信它能够正常工作。