我如何 "Rotate" 一组结果从行到列为不同组的用户

How do I "Rotate" a set of results from rows into columns for users in various groups

我是 运行 MySQL 5.7.

我正在寻找一个 SQL 查询,它将一些数据从行“旋转”到列中。 table 是这样的:

users table

user_id,first_name
1,Alice
2,Bob
3,Eve
4,Mallory

user_groups table

user_id,group_name
1,Administrator
2,Editor
2,Contributor
3,Viewer

有一小组有限的小组,我想生成如下结果:

user_id,first_name,Administrator,Editor,Contributor,Viewer
1,Alice,Yes,No,No,No
2,Bob,No,Yes,Yes,No
3,Eve,No,No,No,Yes
4,Mallory,No,No,No,No

我什至不确定我将如何称呼这种查询,但这就是我想做的。 “是”和“否”可以是0和1,也可以是NULL和1,都可以。

有什么想法吗?

SELECT u.user_id,
 MAX(CASE group_name WHEN 'Administrator' THEN 'Yes' ELSE 'No' END) AS Administrator,
 MAX(CASE group_name WHEN 'Editor' THEN 'Yes' ELSE 'No' END) AS Editor,
 MAX(CASE group_name WHEN 'Contributor' THEN 'Yes' ELSE 'No' END) AS Contributor,
 MAX(CASE group_name WHEN 'Viewer' THEN 'Yes' ELSE 'No' END) AS Viewer
FROM users AS u
LEFT OUTER JOIN user_groups AS g USING (user_id)
GROUP BY u.user_id;

MySQL 不支持 PIVOTCROSSTAB 的任何特殊语法,因为某些其他品牌的 SQL 数据库支持。