2014-02-08 36 views
0

我有表格。將按結果分組轉換爲列(PHP MYSQL)

Country Status 
USA  A 
USA  A 
USA  B 
USA  C 
UK  A 
UK  D 
UK  D 
China A 
China A 
China C 
China C 

我想編寫一個查詢並在下面的表中顯示結果。

Country A B C D Total 
USA  2 1 1 0 4 
UK  1 0 0 2 3 
China 2 0 2 0 4 
Total 5 1 3 2 11 

$q="SELECT Country,Status,Count(Status) as Stat Group BY Country,Status"; 
$r=mysql_query($q); 
while($o=mysql_fetch_object($r)){ 
$t .="<tr> 
     <td>$o->Country</td> 
     <td>$o->Status</td> 
     <td>$o->Stas</td> 
     </tr>"; 
} 

它輸出。上面我想要的。它將國家和地位分組,但我不想多次顯示國家。我想顯示Status的行輸出作爲列並顯示它的數量。

USA A 2 
USA B 1 
USA C 1 
UK A 1 
UK D 2 
China A 2 
China C 2 
+0

請重新格式化你的問題,它是不可讀。你試圖實現你的目標是什麼? – markusthoemmes

+0

考慮處理表示層/應用程序級代碼中的數據顯示問題。 – Strawberry

+0

p.s.不要使用mysql函數使用PDO或MYSQLI – ChelseaStats

回答

0

你可以通過查詢或直接進入php代碼來做到這一點。在查詢中,它被稱爲PIVOTing表。

這將是:

select Country, A, B, C, D, (A+B+C+D) Total 
    from (
    select Country 
      sum(case status = 'A' then 1 else 0 end) as A, 
      sum(case status = 'B' then 1 else 0 end) as B, 
      sum(case status = 'C' then 1 else 0 end) as C, 
      sum(case status = 'D' then 1 else 0 end) as D 
     from yourtable 
    group by Country 
    ) as t 

的問題,這是每一個新status你將不得不改變你的查詢添加新sum

0

我也有同樣的需要,這裏是我得到的結果的SQL:

SELECT practiceCode, A, B, C, D, (A+B+C+D) Total 
FROM (
    SELECT practiceCode, 
     SUM(CASE WHEN TYPE = 1 THEN 1 ELSE 0 END) AS A, 
     SUM(CASE WHEN TYPE = 2 THEN 1 ELSE 0 END) AS B, 
     SUM(CASE WHEN TYPE = 3 THEN 1 ELSE 0 END) AS C, 
     SUM(CASE WHEN TYPE = 4 THEN 1 ELSE 0 END) AS D 
    FROM laborder 
    GROUP BY practiceCode, TYPE 
) AS t 
+0

@VictorM:謝謝你改進這篇文章的格式!您不需要在帖子中添加「編輯:」,因爲編輯的原因已包含在編輯歷史記錄中。 –