搜索

首页  >  问答  >  正文

将基于行的结果转换为基于列的结果,供不同组的用户使用:如何实现这种“轮换”?

我正在运行 MySQL 5.7。

我正在寻找一个 SQL 查询,它将一些数据从行“旋转”到列中。表格如下:

users

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

user_groups

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,都可以。

有什么想法吗?

P粉937382230P粉937382230272 天前424

全部回复(1)我来回复

  • P粉239089443

    P粉2390894432024-03-30 00:13:57

    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;

    与其他一些品牌的 SQL 数据库不同,MySQL 不支持 PIVOTCROSSTAB 的任何特殊语法。

    回复
    0
  • 取消回复