2017-02-13 117 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