【问题标题】:SSIS Merge While?SSIS 合并时?
【发布时间】:2017-03-17 22:03:30
【问题描述】:

我有两个数据集。一个是维度表,其数据类似于下面的示例

Table1

Key    StartDate     EndDate       Name       Data_1
1      2017-01-01    2017-01-03    Billy G    58uf
2      2017-01-10    2017-01-12    S Dogg     4940

我还有一个名为 dbo.DimDate 的标准日期维度。如何将日期维度合并到 Table1 上,以便 Table1 包含每条记录的 StartDate 和 EndDate 之间的每一天的记录?

想要的结果是这样的:

Table2 

Key    StartDate     EndDate       Name       Data_1    Day
1      2017-01-01    2017-01-03    Billy G    58uf      2017-01-01
1      2017-01-01    2017-01-03    Billy G    58uf      2017-01-02
1      2017-01-01    2017-01-03    Billy G    58uf      2017-01-03
2      2017-01-10    2017-01-12    S Dogg     4940      2017-01-10
2      2017-01-10    2017-01-12    S Dogg     4940      2017-01-11
2      2017-01-10    2017-01-12    S Dogg     4940      2017-01-12

这需要在 SSIS 包中完成。我认为简单的 MERGE JOIN 不会起作用,因为 1) Date 维度没有与 Table1 中的任何内容匹配的键,以及 2) 我需要它为 StartDate 和 EndDate 之间的每个日期添加一天

如果我执行一个 SQL 命令,那么如何让它从两个单独的表中提取?

【问题讨论】:

  • 你想要的结果的最后一条记录,为什么EndDate是'2017-01-11'而不是'2017-01-12'?
  • 抱歉打错了
  • 如果没有公共列(或键)加入,不能使用Merge Join,我会考虑另一种方法来做到这一点
  • 你能展示一下 DimDate 表的样子吗?

标签: sql ssis


【解决方案1】:

您可以通过查找来做到这一点。您的主要源组件将是日期维度,在查找中,您将获得 Table1 中日期维度的日期在开始/结束范围内的行,并将这些列添加到您的数据流中。

【讨论】:

    【解决方案2】:

    我通过使用一个简单的 OLE DB 源解决了这个问题,该源执行了我从 stackoverflow 上的另一篇文章中复制的 SQL 命令(参见此处:SQL query to convert date ranges to per day records

    基本上只是复制,调整表名,然后粘贴到源属性中

    【讨论】:

      猜你喜欢
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多