在SSIS的CSV文件中将多行合并为一行

在SSIS的CSV文件中将多行合并为一行,ssis,Ssis,我将数据从SQL加载到CSV文件。我的csv记录如下所示 Eid ename desig sourceD location 1 Ralf PM 1 UK 1 Ralf PM 1 USA 2 Marty PL 3 GBR 3 Levis BA 5 UK 4 Ricky BI 7 RSA 4

我将数据从SQL加载到CSV文件。我的csv记录如下所示

Eid  ename  desig  sourceD  location  
1     Ralf   PM      1        UK  
1     Ralf   PM      1        USA  
2     Marty  PL      3         GBR  
3     Levis  BA      5        UK  
4     Ricky  BI      7        RSA  
4     Ricky  BI      7        FRA 
现在我想把EID 1和EID 4合并成一行。我的输出必须采用以下方式

Eid  ename  desig  sourceD  location  
1     Ralf   PM      1        UK, USA  
2     Marty  PL      3         GBR  
3     Levis  BA      5        UK  
4     Ricky  BI      7        RSA, FRA   
我只有CSV文件,没有任何sql查询或任何东西

SQL查询

    select c1.Eid, c1.ename,c1.desig,c1.sourceD,
    (   SELECT x.location + ', '
        FROM Contacts x
        WHERE c1.Eid = x.Eid
        ORDER BY x.location
        FOR XML PATH ('')
    ) as Locations
from Contacts c1
group by c1.Eid, c1.ename,c1.desig,c1.sourceD
工作

如果希望最后不使用逗号:

    SELECT c1.Eid, c1.ename,c1.desig,c1.sourceD,
   LEFT( (   SELECT x.location + ', '
        FROM Contacts x
        WHERE c1.Eid = x.Eid
        ORDER BY x.location
        FOR XML PATH ('')
    ),LEN((   SELECT x.location + ', '
        FROM Contacts x
        WHERE c1.Eid = x.Eid
        ORDER BY x.location
        FOR XML PATH ('')
    ))-1) AS Locations
FROM Contacts c1
GROUP BY c1.Eid, c1.ename,c1.desig,c1.sourceD
此查询将允许您避免长度0:

    SELECT c1.Eid, c1.ename,c1.desig,c1.sourceD,
   LEFT( (   SELECT x.location + ', '
        FROM Contacts x
        WHERE c1.Eid = x.Eid
        ORDER BY x.location
        FOR XML PATH ('')
    ),CASE WHEN LEN((   SELECT x.location + ', '
        FROM Contacts x
        WHERE c1.Eid = x.Eid
        ORDER BY x.location
        FOR XML PATH ('')
    ))=0 THEN 1 ELSE LEN((   SELECT x.location + ', '
        FROM Contacts x
        WHERE c1.Eid = x.Eid
        ORDER BY x.location
        FOR XML PATH ('')
    )) END -1) AS Locations
FROM Contacts c1
GROUP BY c1.Eid, c1.ename,c1.desig,c1.sourceD

您正在从表中加载此数据?是的,我正在使用sql queryHI加载数据,我有将近150个克隆,当我在进行更改后运行时,它表示传递给子字符串的长度参数无效。错误为您提供了第二个查询LEN函数。需要在不使用LEN函数的情况下删除最后一个逗号。或者你有人没有位置。。。长度不知何故等于1或0,因此此错误警报。您需要在LEN=0的位置查找这些记录:选择c1.Eid、c1.ename、c1.desig、c1.SOURGED、选择x.location+',“来自联系人x,其中c1.Eid=x.Eid按x.location排序,用于XML路径作为来自联系人c1的位置,其中LEN选择x.location+”,“来自联系人x,其中c1.Eid=x.Eid按x.location排序,用于XML路径=0,按c1.Eid、c1.ename、c1.desig分组,我更新了我的答案,如果长度为0,你可以输入0。