我有一个包含一些重复行的表。我只想修改重复的行,如下所示。
前:
id col1
------------
1 vvvv
2 vvvv
3 vvvv
后:
id col1
------------
1 vvvv
2 vvvv-2
3 vvvv-3
Col1 附加一个连字符和id
列的值。
我有一个包含一些重复行的表。我只想修改重复的行,如下所示。
前:
id col1
------------
1 vvvv
2 vvvv
3 vvvv
后:
id col1
------------
1 vvvv
2 vvvv-2
3 vvvv-3
Col1 附加一个连字符和id
列的值。
此 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)
查看IN
Oracle 语法。查询未测试
update table1 set
col1 = col1 || id
where
id not in (
select min(id) from table1
groupby col1
)
您可以使用 sproc 和游标来做到这一点。我认为在任何合理的选择查询中都不可能。
您可以通过 2 步过程来完成此操作,尽管 SQL 向导可能会对其进行修改,以便一步为您提供解决方案。
首先,您需要获取所有重复值。这是一个可以执行此操作的 SQL 查询:
SELECT COUNT(*) AS NumberOfDuplicates, col1 从表 1 按 col1 分组 有(计数(*)> 1)
这将为您提供一个列出重复次数和重复值的结果集。
在第 2 步中,您将遍历此结果集,获取 col1 值,返回包含该值的所有记录,并(可能使用循环计数器变量)根据您的示例更改值。
注意:您实际上并不需要返回重复的数量来实现您的目标,但它会帮助您测试查询并对其工作感到满意。