3

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

前:

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

后:

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

Col1 附加一个连字符和id列的值。

4

4 回答 4

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)
于 2008-11-26T10:46:53.430 回答
2

查看INOracle 语法。查询未测试

update table1 set
col1 = col1 || id
where
id not in (
select min(id) from table1
groupby col1
)
于 2008-11-26T06:44:03.763 回答
0

您可以使用 sproc 和游标来做到这一点。我认为在任何合理的选择查询中都不可能。

于 2008-11-26T06:04:48.990 回答
0

您可以通过 2 步过程来完成此操作,尽管 SQL 向导可能会对其进行修改,以便一步为您提供解决方案。

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

SELECT COUNT(*) AS NumberOfDuplicates, col1
从表 1
按 col1 分组
有(计数(*)> 1)

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

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

注意:您实际上并不需要返回重复的数量来实现您的目标,但它会帮助您测试查询并对其工作感到满意。

于 2008-11-26T06:10:05.343 回答