2014-12-02 2 views
1

Я пытаюсь решить SQL запрос, где есть три таблица Таблица 1, Таблица 2 и Table3 как в данном изображении нижеСбора запятой «» отделенные данные из приведенных таблиц

enter image description here

как в Table1 существует два столбца user_id и user_name. в таблице 2 есть три столбца id1 (автоматически сгенерировано), user_id (то же, что и user_id таблицы1) и role_id. В таблице 3 снова есть три столбца id2 (автоматически сгенерировано), role_id (то же, что и role_id таблицы2) и имя роли. Наконец, я ожидаю приведенную таблицу как заданную результирующую таблицу, где есть выбранные строки и разделенные запятой «,». Пожалуйста, дайте идею или запрос, чтобы решить эту проблему.

+2

Выберите вашу базу данных: MySQL или SQL Server. И отметьте соответствующим образом. –

+0

привет большое спасибо за ответ. я хочу сделать для sql-сервера –

+1

http://stackoverflow.com/search?q=[sql-server]+group_concat –

ответ

2

Идея здесь For XML path который будет concat ваш rows в 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

Я не понял по материалам, что делает материал с помощью? –

+0

@JiteshUpadhyay - здесь используется для удаления ** ведущей запятой **. Проверьте это http://msdn.microsoft.com/en-in/library/ms188043.aspx. Вы можете использовать любую другую функцию String, такую ​​как 'Right',' Substring', чтобы удалить эту ведущую запятую –

Смежные вопросы