1

我有两张桌子:

表 1(名称、(...)、产品 ID)

表 2(客户名称、产品 ID)

样品表 1

Test1 | 1

示例表 2:

Customer1 | 1

Customer2 | 1

表架构是固定的,我无法更改它,也无法创建其他视图等。使用 SQL Server 集成服务,我必须创建一个新表。在这个新表中,我需要有一列与客户类似Customer1; Customer2for Test1

我知道我可以用 COALESCE 做到这一点,但我不知道如何在 SSIS 中做到这一点。我应该使用哪种转换,以及如何使用?

更新 这是 COALESCE 的示例:

DECLARE @names VARCHAR(150) 

SELECT @names = COALESCE(@names + '; ', '') + [CustomerName]
  FROM Table2

SELECT @names

如何将此片段插入一个新的SELECT * FROM Table1

4

3 回答 3

3

获取您的 OLEDB 源并对该源使用 SQL 查询。

SELECT T1.Name, T2.Customer  
FROM [TABLE 1] AS T1
    INNER JOIN [Table 2] as T2
        ON T1.ProductID = T2.ProductID

然后使用数据流将其移动到您的 OLEDB 目的地。如果您可以轻松地让数据库引擎处理它,则无需在这方面花哨的 SSIS。

于 2013-04-30T15:13:03.630 回答
1

好的,我找到了解决方案:

SELECT [All_My_Other_Fields], STUFF(
             (SELECT '; ' + [CustomerName] 
              FROM Table2
              WHERE Table2.ProductID=Table1.ProductID
              FOR XML PATH (''))
             , 1, 1, '') AS Customers
FROM Table1

谢谢大家的帮助!

于 2013-05-03T12:13:10.690 回答
1

您最好和最高效的解决方案是使用 SQL 查询作为源,而不是原始表。然后您可以在 SQL 查询中执行 COALESCE(或连接),它将通过 SSIS 数据管道传递。

于 2013-04-30T15:01:24.777 回答