1

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 

ここで、EID1と4を1つの行に結合したいと思います。私の出力は次のようにする必要があります

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クエリなどはありません。

4

1 に答える 1

2

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
于 2012-09-05T08:45:18.663 に答える