如何将没有公共列的 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 个表中?的主要内容,如果未能解决你的问题,请参考以下文章