我正在尝试解决一个sql查询,其中有三个表TABLE 1,TABLE 2和TABLE3,如下图所示
如表1所示,有两列user_id和user_name。在表2中,有三列id1(自动生成),user_id(与table1的user_id相同)和role_id。在表3中,还有三列id2(自动生成),role_id(与table2的role_id相同)和role_name。最后我期待一个结果表作为给定的结果表,其中有一个选择的行并用逗号“,”分隔。请给出想法或查询来解决这个问题。
答案 0 :(得分: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