我有两张桌子:
表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
?
答案 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
谢谢大家的帮助!