对于通用标题感到抱歉,但我不知道如何用几句话解释这一点。 我有一个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 |
提前致谢
干杯
利玛
答案 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