2013-01-11 78 views
0

我有一個呼叫記錄數據庫,我想從中獲取團隊信息。它運行在一箇舊的MySQL 4.0.16服務器上,所以我很努力地獲得沒有子查詢/視圖的數據,並且正在尋找正確的方向,因爲我對MySQL/PHP還是比較新的。MySQL 4.0.16無子查詢更新表

源表的形式:

callid | team | status 
--------------------------- 
15432 | team A | open 
15433 | team B | open 
15434 | team A | onhold 
15435 | team A | closed 
15436 | team A | closed 

,我想輸出每狀態每隊的呼叫的數量,所以應該是這樣的:

team | open | onhold | closed 
-------------------------------- 
team A | 1 | 1  | 2 
team B | 1 | 0  | 0 

這既可以在選擇語句中,或者使用臨時表和多個查詢,因爲這些將允許我使用數據來顯示整個團隊信息。

我已經創建了臨時表,並填充了onhold等數量的團隊名稱和零值,但是我沒有提出一條更新語句,然後我們會爲每個團隊添加每個狀態的數量調用,而無需子查詢。在MySQL 4.0.16中進行此操作的最佳方式是什麼?感謝您提供任何幫助。

+0

的可能重複[MySQL數據透視表](http://stackoverflow.com/questions/7674786/mysql-pivot-table) – RichardTheKiwi

回答

1

可以使用聚合函數的情況下表達得到你想要的格式的數據:

select team, 
    sum(case when status = 'open' then 1 else 0 end) Open, 
    sum(case when status = 'onhold' then 1 else 0 end) Onhold, 
    sum(case when status = 'closed' then 1 else 0 end) Closed 
from yourtable 
group by team 

SQL Fiddle with Demo

結果是:

| TEAM | OPEN | ONHOLD | CLOSED | 
----------------------------------- 
| team A | 1 |  1 |  2 | 
| team B | 1 |  0 |  0 | 
+0

擊敗我吧!因爲MySQL會爲比較返回1或0,所以我會將條件快捷化爲'sum(status ='open')',但是您的版本可能更具可移植性。 – ESG

+0

非常感謝bluefeet和TheVedge - 這是在SQL查詢編輯器中提供所需的數據,現在可以通過PHP進入Google圖表表格可視化,因此看起來不錯。我覺得我太專注於我創建的臨時表,並試圖使它以這種方式工作,當這是更簡單。再次感謝! – MrRoboto

+0

@MrRoboto樂於助人。 :) – Taryn