2016-03-22 4 views
2

私はいくつかの検索を行いましたが、この質問は以前何度か尋ねられましたが、ソリューションを自分の実際の例に変換することはできません。誰かが私を正しい方向に向けることができますか?GROUP_CONCAT for SQL Server

は、私は彼らが行うすべてのスポーツをリストアップした人ごとに1つの行を返すSELECTクエリを希望

People 
+-------+------------+ 
| uid | person | 
+-------+------------+ 
| 1 | Tom  | 
+-------+------------+ 
| 2 | Dick  | 
+-------+------------+ 
| 3 | Harry  | 
+-------+------------+ 
| 4 | Peter  | 
+-------+------------+ 
| 5 | Paul  | 
+-------+------------+ 

Sports 
+---------+----------------+ 
| gid | group_name | 
+---------+----------------+ 
| 1 | Dancing  | 
+---------+----------------+ 
| 2 | Golf   | 
+---------+----------------+ 
| 3 | Football  | 
+---------+----------------+ 
| 4 | Tennis   | 
+---------+----------------+ 
| 5 | Squash   | 
+---------+----------------+ 

Teams 
+---------+---------+ 
| gid | uid | 
+---------+---------+ 
| 1 | 1 | 
+---------+---------+ 
| 2 | 1 | 
+---------+---------+ 
| 3 | 1 | 
+---------+---------+ 
| 1 | 2 | 
+---------+---------+ 
| 2 | 2 | 
+---------+---------+ 
| 3 | 2 | 
+---------+---------+ 
| 4 | 2 | 
+---------+---------+ 
| 2 | 3 | 
+---------+---------+ 
| 1 | 4 | 
+---------+---------+ 
| 5 | 4 | 
+---------+---------+ 
| 1 | 5 | 
+---------+---------+ 
| 4 | 5 | 
+---------+---------+ 
| 3 | 5 | 
+---------+---------+ 

以下のように3つのデータベースのテーブルを持っている(カンマ区切り)。上記の例では、結果はMYSQLで

+-------+------------+----------------------------------+ 
| uid | person | group_name      | 
+-------+------------+----------------------------------+ 
| 1 | Tom  | Dancing, Golf, Football   | 
+-------+------------+----------------------------------+ 
| 2 | Dick  | Dancing, Golf, Football, Tennis | 
+-------+------------+----------------------------------+ 
| 3 | Harry  | Golf        | 
+-------+------------+----------------------------------+ 
| 4 | Peter  | Dancing, Squash     | 
+-------+------------+----------------------------------+ 
| 5 | Paul  | Tennis, Football     | 
+-------+------------+----------------------------------+ 

だろう、私はGROUP_CONCATを使用することになりますが、この例では、私はSQL Serverを使用しています。

誰でも助けてください。

+2

XMLパース( '') ' – Wanderer

+0

を試してみてください。この質問は、研究努力がないことを示しています。 –

+0

他のソリューションは、2つのテーブルから情報を収集する方法を示していますが、私のニーズは3つのテーブルからのものです。それを修正する私自身の努力は、さまざまなエラーを生成します。最新は、 "varchar値 '、'をデータ型intに変換するときに変換に失敗しました。 – Typhoon101

答えて

2
SELECT p.uid, p.person, 
     stuff (g.group_name, 1, 1, '') as group_name 
FROM People p 
CROSS APPLY 
(
    SELECT ',' + s.group_name 
    FROM Teams t 
      INNER JOIN Sports s ON t.gid = s.gid 
    WHERE t.uid = p.uid 
    ORDER BY s.group_name 
    FOR XML PATH ('') 
) g (group_name) 
+2

なぜdownvoteですか?コメントを気にする? – Squirrel