如何将没有公共列的 2 个表合并到 SSIS 中的 1 个表中?

Posted

技术标签:

【中文标题】如何将没有公共列的 2 个表合并到 SSIS 中的 1 个表中?【英文标题】:How would I combine 2 tables with no common column into 1 table in SSIS? 【发布时间】: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)? 【参考方案1】:

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

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

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

如何解决这个问题?

第一步:添加连接列

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

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

Adding row numbers to SSIS data flows HOW TO ADD A ROW NUMBER TO A DATA FLOW TASK IN SSIS 2012

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

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

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

更多细节在:

Row Number Without Using Order By In SQL Server

第二步:连接两个数据源

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

SSIS Merge Join vs. Merge Transformation Using the Merge Join Transformation in SSIS packages

【讨论】:

以上是关于如何将没有公共列的 2 个表合并到 SSIS 中的 1 个表中?的主要内容,如果未能解决你的问题,请参考以下文章

如何加入没有公共列的第四个表

如何使用 SSIS 运行 s-s-rS 报告?

使用 SSIS 将单个字段值拆分为第二个表中的多行

sql server 语句如何将3个表合并成一个表?

如何在调试过程中强制 SSIS 数据流出错或停止?

(急)4个excel数据表合并成1个表