2017-02-13 149 views
1

对于通用标题感到抱歉,但我不知道如何用几句话来解释这一点。 我有一个user_role表,它是使用数据库/ jdbc管理tomcat领域的经典结构的一部分。 是这样的:如何编写一个MySQL查询来获得这个结果?

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

我怎么能写在MySQL查询(如果可能的话),以有这样的结果:

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

在此先感谢
干杯
利玛窦

+1

总角色数是否固定为三? – GurV

+0

look on http://stackoverflow.com/questions/7674786/mysql-pivot-table –

回答

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 
+0

使用固定值的样本不好...您应该暗示他们实际上有一个表名,即使没有明确提供 – DRapp

+0

编辑我的答案,感谢您的建议.. – sumit

0

从萨米特的报价

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 

简体现在,如果你想在用户的真实姓名,并有相应的用户表,加入到得到的名称。

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 
相关问题