2012-09-05 31 views
1

我將數據從SQL加載到CSV文件。我的csv記錄有以下幾種。將SSISS中的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和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查詢或任何東西。

+0

您lodaing從表這個數據? – Justin

+0

是的,我正在加載數據使用SQL查詢 – user1348424

回答

2

SQL Fiddle

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 

這個查詢可以讓你避免lenght 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 
+0

真棒它工作謝謝 – user1348424

+0

嗨,我有近150 cloumns,當我跑了之後進行更改,它是說無效的長度參數傳遞給子字符串。 – user1348424

+0

該錯誤給你第二個查詢LEN()函數。需要以某種方式刪除最後一個逗號而不使用LEN()函數。或者你有沒有位置的人...長度不管怎樣都是平等的1或0,所以這個錯誤提醒。 – Justin