【问题标题】:How would I combine 2 tables with no common column into 1 table in SSIS?如何将没有公共列的 2 个表合并到 SSIS 中的 1 个表中?
【发布时间】:2021-12-24 01:52:28
【问题描述】:

我有两张表,一张包含 ID,另一张包含 HourlyRate 和 Bonus,我想按以下方式组合它们

ID HourlyRate Bonus
1 10.50 3
2 7.85 2
3 30.10 4

但我只能通过使用合并、联合等得到类似的东西

ID HourlyRate Bonus
NULL 10.50 3
NULL 7.85 2
NULL 30.10 4
1 NULL NULL
2 NULL NULL
3 NULL NULL

【问题讨论】:

  • 帮我理解...希望生产第二张桌子,或者第二张桌子是您正在生产的,而这不是您想要的?
  • 第二张桌子是我正在制作的,那是我不想得到的。
  • 表一包含 (1,2,3)。表二包含 ((10.5,3), (7.85,2), (30.10,4))。你怎么知道 ID 1 应该关联到 (10.5, 3) 而不是 (30.10, 4)?

标签: sql-server ssis etl


【解决方案1】:

您不能同时加入两个数据源!

根据您的问题,您希望在两个表之间执行连接操作。但不好的是,连接需要在每个表中的一个或多个列上执行。

此外,您尝试执行的联接操作背后的逻辑是什么?第一个表中ID = 1 的行如何与每小时Rate = 10.50 的行合并?

如何解决这个问题?

第一步:添加连接列

要解决这个问题,您必须生成一个可以在联接(合并联接)中使用的新列。例如,如果您需要使用行号加入; 第一个表中的第一行与第二个表中的第一行合并...。然后,您需要为每个表添加一个行号列。

您可以使用脚本组件为每个表添加行号列,如以下文章中所述:

请记住,如果第一个表中的 ID 列可能包含数字之间的间隙(即 1、2、3、6、7、...),则您需要两个脚本组件。

另一种方法是从 SQL 中添加行号列(如果数据存储在 SQL 中) 使用ROW_NUMBER() SQL 函数:

SELECT ROW_NUMBER() OVER(ORDER BY (Select 0)) as row_id, *
FROM TableA

更多细节在:

第二步:连接两个数据源

添加行号列后,您应该使用合并连接组件来合并两个数据源。您可以在以下文章中了解有关合并和合并联接组件的更多信息:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2020-07-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    相关资源
    最近更新 更多