在一列中的SSIS中Concat多行

时间:2013-04-30 14:32:47

标签: sql-server ssis

我有两张桌子:

表1(名称,(...),ProductID)

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

样本表1

Test1 | 1

样本表2:

Customer1 | 1

Customer2 | 1

表架构是固定的,我无法更改它,我无法创建其他视图等。 使用SQL Server Integration Services,我必须创建一个新表。在这个新表格中,我需要为客户提供一列专栏Customer1; Customer2 Test1

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

更新 以下是COALESCE的样本:

DECLARE @names VARCHAR(150) 

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

SELECT @names

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

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

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

答案 2 :(得分: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

谢谢大家的帮助!