【问题标题】:SSIS Conditional SplitSSIS 条件拆分
【发布时间】:2014-03-31 22:06:14
【问题描述】:

我正在将一组数据导入 OLE DB SQL SERVER。我有两列:

ID  CONDITION  CLIENT
1   A11111     G12345
1   X11111     G23456
2   A11111     G12345
2   A11111     G12345
3   A11111     G12345
3   A11111     G23456
4   X11111     G12345

我必须删除重复项并通过转换上传表格。如果condition 列重复项具有相同的值,则取该值,如果它们不同,则取较小的一个。与client 列相同。我把它带到 SQL 服务器中的临时表中,使用条件拆分在两种条件下使用 rank==1 过滤排名。每件事都运行良好,但对于两条记录,条件列上的这些排名采用默认值,但该记录应流经管道,因为客户端排名为 1。请问有什么建议可以解决这个问题吗?

【问题讨论】:

  • 不确定我是否理解问题所在,能否请您发布一个错误和所需输出的示例?
  • 例如,在两列上排名后的两条记录看起来像 ID Condition Client RankOnCondition RankOnClient 1 A11111 G42345 1 2 1 X11111 G23456 2 1 当我通过使用排名的条件拆分将此记录传递给默认值时因为即使它通过一个等级条件拆分,它也会从另一个拆分默认。将记录带入数据库的任何可能解决方案

标签: sorting ssis filtering transformation rank


【解决方案1】:

删除重复项的最简单方法是在您的选择语句中使用 GROUP BY 或 DISTINCT 子句。

或者,如果您正在寻找最新的值,按 Id 分组的 row_number() 语句,按 UpdateDate 排序?下降。每个 id 的 row_number 的结果将使您能够仅选择每个 id 的 row_number 为 1 的那些行。 For a similar Row_Number example have a look at this

【讨论】:

    【解决方案2】:

    您的第一个条件应该有 2 个输出:正数,当 rank==1 时,应该输出到 UNION ALL 转换,默认输出到第二个条件。 第二个条件也应该将 rank==1 输出到 UNION ALL 转换。

    然后,UNION ALL 的输出将包含通过一个或另一个条件的任何行。

    【讨论】:

      猜你喜欢
      • 2012-01-29
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多