2014-12-02 27 views
1

我試圖解決的SQL查詢下面收集逗號「」從給定的表分離的數據

enter image description here

其中有三個表表1,表2和表3中給定的圖像如在表1有兩列user_id和user_name。在表2中,有三列id1(自動生成),user_id(與table1的user_id相同)和role_id。在表3中,還有三列id2(自動生成),role_id(與table2的role_id相同)和role_name。最後,我期待一個結果表作爲給定的結果表,其中有一個選擇的行,並用逗號「,」分隔。請給出想法或查詢來解決這個問題。這裏

+2

選擇你的數據庫:MySQL或SQL服務器。並適當標記。 – 2014-12-02 15:54:16

+0

您好,非常感謝您的回覆。我想爲SQL服務器做 – 2014-12-02 15:55:21

+1

http://stackoverflow.com/search?q=[sql-server]+group_concat – 2014-12-02 15:55:42

回答

2

理念是For XML path這將concatrows爲CSV

SELECT ', ' + d.roleid as Concat_roleid 
FROM table3 d 
FOR XML PATH('') 

SELECT a.userid, 
     Stuff((SELECT ', ' + d.roleid 
       FROM table3 d 
       WHERE d.id2 = c.id2 
       FOR XML PATH('')), 1, 2, '') Roleid, 
     Stuff((SELECT ', ' + e.Rolename 
       FROM table3 e 
       WHERE e.id2 = c.id2 
       FOR XML PATH('')), 1, 2, '') Rolename 
FROM table1 a 
     JOIN table2 B 
     ON a.userid = b.userid 
     JOIN table3 C 
     ON c.roleid = b.roleid 
GROUP BY a.userid 
+0

我不明白的東西,是什麼意思? – 2014-12-02 16:16:40

+0

@JiteshUpadhyay - 這裏的東西是用來刪除**領先的逗號**。看看這個http://msdn.microsoft.com/en-in/library/ms188043.aspx。您可以使用任何其他字符串函數(如「Right」,「Substring」)來刪除該前導逗號 – 2014-12-02 16:18:35