【问题标题】:SQL: How to append IDs to the rows with duplicate valuesSQL:如何将 ID 附加到具有重复值的行
【发布时间】:2010-09-24 02:36:00
【问题描述】:

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

之前:

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

之后:

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

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

【问题讨论】:

  • 嗯,那不赚钱
  • 您是否要求使用 SQL 语句来识别和修改重复行?
  • 多于2份怎么办? if (4, 'vvvv') 是下一行你想看什么?

标签: sql duplicates


【解决方案1】:

这个 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)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2021-04-22
          • 1970-01-01
          • 2014-06-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-14
          • 1970-01-01
          • 2021-04-18
          • 2012-04-07
          相关资源
          最近更新 更多