在SSIS的CSV文件中将多行合并为一行
我将数据从SQL加载到CSV文件。我的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
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。