我有一个包含一些重复行的表。我想修改重复的行,如下所示。
在:
id col1
------------
1 vvvv
2 vvvv
3 vvvv
后:
id col1
------------
1 vvvv
2 vvvv-2
3 vvvv-3
Col1附加一个连字符,值为id
列。
答案 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值,返回包含该值的所有记录以及(可能使用循环计数器变量)根据您的示例更改值。
注意:您实际上不需要返回重复数量来实现目标,但它可以帮助您测试查询并确信它能够正常工作。