如何编写MySQL查询以获得此结果?

时间:2017-02-13 10:04:00

标签: mysql database mysql-5.7

对于通用标题感到抱歉,但我不知道如何用几句话解释这一点。 我有一个user_role表,它是使用database / jdbc在tomcat中管理域的经典结构的一部分。 它是这样的:

userid | roleid
user1  | role1
user1  | role2
user2  | role2
user2  | role3

如何在mysql中编写查询(如果可能的话),得到如下结果:

         | role1 | role2 | role3 |   
  user1  |   x   |   x   |       |   
  user2  |       |   x   |   x   |   

提前致谢
干杯
利玛

2 个答案:

答案 0 :(得分:0)

Mysql不支持开箱即用的旋转,你可以使用CASE WHEN

select SUM(role1),sum(role2),sum(role3),user FROM (
select 
case when role = 'role1' then 1   else 0 end as role1,
case when role = 'role2' then 1   else 0 end as role2,
case when role = 'role3' then 1   else 0 end as role3,
user
FROM tbl
)tmp1
 group by user

答案 1 :(得分:0)

从Sumit的优惠中简化

select 
      ur.userid,
      max( case when ur.roleid = 'role1' then 'X' else ' ' end ) as role1,
      max( case when ur.roleid = 'role2' then 'X' else ' ' end )  as role2,
      max( case when ur.roleid = 'role3' then 'X' else ' ' end ) as role3
   from
      UserRoles ur
   group by
      ur.userid

现在,如果您想要用户的实际名称并拥有相应的USER表,请加入该表以获取该名称。

select 
      u.userName,
      max( case when ur.roleid = 'role1' then 'X' else ' ' end ) as role1,
      max( case when ur.roleid = 'role2' then 'X' else ' ' end )  as role2,
      max( case when ur.roleid = 'role3' then 'X' else ' ' end ) as role3
   from
      UserRoles ur
         JOIN Users u
            on ur.userid = u.userid
   group by
      ur.userid