【问题标题】:Join Two tables having different number of columns连接两个具有不同列数的表
【发布时间】:2013-01-16 06:28:08
【问题描述】:

我在 ssis 中有一个这样的场景 - 我有两个不同的输入,其中一个来自查找不匹配输出。另一个输入实际上是一个派生列,它来自使用 sql 查询的 oledb 源中的单行单列结果。问题是我需要加入这两个输入并使其成为单个数据集,以进一步将数据推送到 crm 目的地(Cozyroc)。

我知道 union all 无法完成这项工作,因为它适用于来自不同数据集的行的联合。

也不能使用合并和合并连接,因为需要提供一个共同的 id 或键才能连接两个数据集,而我没有这样的东西。

例如,我的第一个数据集如下所示:

usinessid          userid      name
---------          ------      ----
ret678             435         john
dfgt67             213         sam

我的第二个数据集是这样的:

systemid
------------------------
6666-777-kjtyr-213t-ytui

使用 oledb source - sql 命令使用单列单行查询提取。

有没有办法将这两个数据集结合起来,最终结果会是这样的:

businessid         userid           name          systemid
----------         ------           ----          ------------------------
ret678             435              john          6666-777-kjtyr-213t-ytui 
dfgt67             213              sam           6666-777-kjtyr-213t-ytui

我想在不使用变量或使用派生列并对 systemid 值进行硬编码的情况下执行此操作。

请原谅我的编辑...

关于这个问题的任何进一步的意见都会非常有帮助。

【问题讨论】:

  • 你能用一个例子来帮助你的口头描述吗?这两个输入是什么样的?您想从中得到什么输出?
  • 我认为脚本组件(类型转换)将适合该工作

标签: sql sql-server-2008 join ssis business-intelligence


【解决方案1】:

要按照您展示的方式组合两个数据集,您可以使用简单的交叉连接:

SELECT
  t1.businessid,
  t1.userid,
  t1.name,
  t2.systemid
FROM
  table1 t1
CROSS JOIN
  table2 t2
;

【讨论】:

  • 感谢您的回答。是的,这似乎是这样做的方法。但是,SSIS 没有直接使用交叉连接的特性。有没有办法在 SSIS 中做到这一点..
  • 另一种产生两个表的叉积的方法是SELECT ... FROM table1 t1, table2 t2。 SSIS 是否支持类似的东西?
  • 好的。我得到了它。对于在 SSIS 中使用交叉连接,没有直接的方法。间接地,您可以为每个数据集创建一个类似于“join_key”的派生列,并将其赋值为 1。然后对两个派生列输出使用排序转换并选择“join_key”字段进行排序。最后,对需要的字段进行完全外连接可以产生交叉连接结果..
  • 哦,我明白了。感谢您分享此解决方法,我想我可能需要记住它以备不时之需。顺便说一句,你认为它必须是一个完整的外部连接吗?在这种情况下,SSIS 会允许内部连接吗?我确实相信它应该也可以工作,而且它也可能会变得更有效,尽管在宣布为真之前仍需要对其进行测试。
  • 另外,为了其他访问者的利益,我相信如果您将解决方案发布为您自己的答案(并在允许后接受它)会是一个更好的主意。毕竟,虽然我的解决方案看起来合乎逻辑,但它在 SSIS 中并没有真正起作用,不是吗?我的意思是,感谢您接受我的解决方案,只是它并没有真正解决问题,而 你的解决方案
猜你喜欢
  • 1970-01-01
  • 2011-04-07
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多