2015-04-07 81 views
0

表定義合併兩個垂直表到一個水平表

表1(水平)這是用戶的一個表

| id | name | phone | 
--------------------- 
| 1 | Bob | 800 | 
| 2 | Phil | 800 | 

表2(垂直表)這是一個隊

的表
| id | name  | 
------------------ 
| 1 | Donkey | 
| 2 | Cat  | 

表3(垂直表)該表連接的前兩個

| id | user_id | team_id | 
-------------------------- 
| 1 | 1 | 1  | 
| 2 | 1 | 2  | 
| 3 | 2 | 1  | 

我的目標

我希望能夠查詢以這樣的方式,我得到的數據可以回:

| id | name | phone | Donkey | Cat | 
------------------------------------- 
| 1 | Bob | 800 | 1  | 1 | 
| 2 | Phil | 800 | 1  | Null | 

此表有我的水平表格數據,然後是其他兩個垂直表格的組合以創建附加列。表2最終成爲列名標題。行的值是從表3中作爲布爾值提取的。

+0

稱爲視圖.. –

回答

0

你追一個數據透視表:

select u.*, 
    sum(case when t1.name = 'Donkey' then 1 else 0 end) Donkey, 
    sum(case when t1.name = 'Cat' then 1 else 0 end) Cat 
    from users u 
    inner join user_team ut1 
     on u.id = ut1.user_id 
    inner join teams t1 
     on ut1.team_id = t1.id 
    group by name 

演示:http://sqlfiddle.com/#!9/5fd33/7

+0

感謝pala_,有沒有一種方法,使案件的動態?它從團隊表中拉出案例列表? –

+0

是的,它有點亂,但這裏是一個更新的小提琴:http://sqlfiddle.com/#!9/52a43/2 –