两个数据源的笛卡尔积

时间:2015-04-10 11:24:06

标签: ssis etl dataflow

我们说我在SSIS中有两个数据源。

表A有10行,其中两列是空的。 表B有20行,每行有两列。

我想以某种方式以某种方式将它们加入到ETL过程中: 对于表A的每一行,使用表B中两列的值生成20行。

这样,应该使用表A和B

中每行的每种可能组合生成200行

我尝试使用合并加入和联盟作品,但他们不会工作......有任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

SELECT table1.column1, table2.column2...
FROM  table1, table2 

笛卡尔联接是MS-SQL世界中的交叉联接。

使用不带where子句的交叉连接

SSIS中逐步加入的一步一步: http://toddmcdermid.blogspot.be/2010/09/performing-cross-join-cartesian-product.html

有关交叉连接的一些SQL Server文档: https://technet.microsoft.com/en-us/library/ms190690%28v=sql.105%29.aspx

答案 1 :(得分:1)

为两个源添加相同的列并为其分配相同的值,例如1.因此,table1中的所有10行和table2中的20行对于该列都具有值“1”。当您现在执行merge join,将联接类型保持为full outer join Voila!时,您拥有cross join。请记住,需要在SSIS的列上对源进行排序,以便继续使用Merge join,否则会引发错误。