在SSIS中合并具有相同用户名的行

时间:2013-10-09 21:14:23

标签: sql sql-server ssis

我在平面文件中从Active Directory获取数据,我需要使用SSIS导出到SQL Server。我的挑战是我想要在SSIS中执行所有操作,并将导出到数据库中的数据作为最终输出。我的平面文件有几行带有相同的用户名,需要合并成一行,然后在一列中连接数据,如下图所示:

    Username        Office       LocationID    Dept
    --------        ----------   ----------    -----
1.  btan            HQ              01         Acct
2.  cvill           South           04         HR
3.  cvill           North           02         HR
4.  btan            East            03         Acct
5.  cvill           West            05         HR
6.  lkays           HQ              01         Legal

我的输出应该如下,并且应该使用SSIS完成:

    Username        LocationID      Dept
    --------        ----------      -----
1.  btan            01, 03          Acct
2.  cvill           04, 02, 05      HR
6.  lkays           01              Legal

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:1)

我支持先前的建议,即这是一个糟糕的数据模型,我也支持SQL(非SSIS)解决方案。但是,如果您必须遵循此路径尽管我们发出警告,请查看SSIS Pivot运算符。您需要将生成的列连接到一列中。

答案 1 :(得分:0)

这样的内容会为您提供以逗号分隔的ID列表

SELECT Username, STUFF(IDList, 1,2,'') AS LocationID, Dept
FROM TableName T OUTER APPLY 
                            (
                            SELECT ', ' + LocationID  [text()]
                            FROM TableName
                            WHERE UserName = T.UserName
                            FOR XML PATH('')
                            ) T2(IDList)