【问题标题】:SSIS-Replace the duplicate column with empty string keeping the original columnSSIS-用空字符串替换重复的列,保留原始列
【发布时间】:2017-02-07 04:24:39
【问题描述】:

谁能帮我解决以下要求。

我需要检查记录中的列是否与我想用空字符串替换重复列的任何其他列匹配。

假设我有 x1、x2、x3 列。如何检查 x1 是否与 x1、x2、x3 列中的任何一个匹配,如果匹配,我想用空字符串替换重复的列。

【问题讨论】:

  • x1 不总是等于 x1 吗?你能提供一个更清楚的例子吗?
  • 不,它可能会也可能不会。如果匹配,那么它将是重复的,我必须用空字符串替换那个重复的列
  • 也许我理解错了。您是否要查看一条记录中的列的值是否与不同记录中的几列的值相同?
  • 要求是我在一个文件中有 10k 多条记录,并且每条记录都有客户详细信息。该记录包括电话号码的三列。所以我想搜索电话号码是否存在于任何其他记录中,如果找到我想用空字符串替换它。
  • 为了清楚起见,您想检查记录 1 中的电话号码是否存在于其他 9,999 条记录的任何其他电话号码列中?或者是:在记录 1 中,您想查看电话号码是否在电话号码列中重复,如果是,则清除 phone2 或 phone3 中的重复值?

标签: ssis


【解决方案1】:

这样做比预期的要复杂。这里有 2 个选项:

  1. 通过复制文件并以高阈值将其与自身进行比较来尝试模糊查找。我怀疑如果其他列上存在匹配项,您想检查相同的记录,因此您需要在键上创建完全匹配(进入“列”选项卡并右键单击链接,“编辑映射”)并进行模糊处理在其他人身上。您只能链接一次字段,因此请根据需要复制列。
  2. 使用所有组合执行存储过程,并让它生成带有结果的输出表(您可以使用 OLE DB 命令运行存储过程)。如果我确定数据的“准确性”,我可能会选择那个。否则,请使用模糊。

【讨论】:

    【解决方案2】:

    由于您只有几列,您可以运行一组更新语句,如下所示:

    update Contacts
    set Phone2 = null
    where Phone2 = Phone1
    
    update Contacts
    set Phone3 = null
    where Phone3 = Phone1
    
    update Contacts
    set Phone3 = null
    where Phone3 = Phone2
    

    【讨论】:

      【解决方案3】:

      在 SSIS 数据流中完成此任务会有点棘手,因为您将尝试将所有缓冲区中的所有其他行与当前行进行比较。

      相反,我建议按照 Gordon Bell 的建议将数据暂存到表格中。然后,您需要确定找到重复项时哪一行获胜。您可能有一个日期列来对其进行排序,或者您可以在 ssis 中的数据流中添加一个行号列并按照您接收数据的方式进行排序。

      下面是一个示例,说明如何找到获胜行并使用自联接更新其他人:Deleting duplicate record in SQL Server

      【讨论】:

        猜你喜欢
        • 2021-12-09
        • 2018-12-01
        • 1970-01-01
        • 2017-03-24
        • 2010-09-06
        • 2018-03-10
        • 2014-04-24
        • 2014-07-15
        • 2016-03-01
        相关资源
        最近更新 更多