2015-08-08 42 views
1

你好我想這個代碼點火器來顯示這樣的表,我必須分別顯示了公司的平均值爲年如何顯示的行,列在MySQL視圖表

但現在我們要改變該結構和行轉換爲列。

year avg  company 
2015 10   2 
2015 50   1 
2014 25   2 
2013 23   2 
2011 56   3 

現在我想我的表看起來像這樣

year 1 2 3 
2015 50 10 
2014  25 
2013  23 
2011   56 
+0

看到你已經用php標記了這個,只需要使用一個簡單的循環來處理那裏的顯示問題。當做貢獻者發佈截然相反的答案時,我確實喜歡它。 – Strawberry

+0

實際上我希望它發送到線形圖的陣列 –

+0

沒關係,一個有序的陣列將工作得很好。 – Strawberry

回答

1

你必須轉動的記錄所需的輸出。

SELECT year 
    , MAX(CASE WHEN company=1 THEN avg ELSE '' END) as `Company1` 
    , MAX(CASE WHEN company=2 THEN avg ELSE '' END) as `Company2` 
    , MAX(CASE WHEN company=3 THEN avg ELSE '' END) as `Company3` 
    FROM so_q31890405 
GROUP BY year 
ORDER BY year DESC 

enter image description here

SQL小提琴Demo

+0

您好,我的平均值是一個函數平均值(價值)作爲平均值 –

+0

顯示您的記錄,您計算了'AVG' –

+0

SELECT YEAR(mptd.updated_time)AS year,avg(mptd.actual_value)AS avgs,mpr.company_id AS性別 FROM( 'mmt_lab_template_details' mltd,,MAX(CASE WHEN company = 1 THEN avg ELSE''END)as'Company1'我想這樣做 –

1

Mysql的不幸並沒有對數據透視表支持。你必須在PHP方面解決這個問題。

三個變量加載數據,以便它們包含:

$companies = [1,2,3]; 
$years = [2015,2014,2013,2011]; 
$averages = [ 
    2015 => [1 => 50, 2 => 10], 
    2014 => [2 => 25], 
    ... 
]; 

然後,你可以寫表:

echo '<table><tr><th>year<th/>'; 
foreach ($companies as $company) 
    echo "<th>$company<th/>"; 
echo '<tr/>'; 
foreach ($years as $year) { 
    echo '<tr><td>$year<td/>'; 
    foreach ($companies as $company) 
     echo "<td>{$averages[$year][$company]}<td/>"; 
    echo '<tr/>'; 
} 
echo '<table/>'; 
-1

查詢是:

選擇一年中,AVG(總和(公司)),按公司統計(公司);

+0

否。一個可能的查詢將是SELECT * FROM companymaster ORDER BY year DESC,company,'avg'; – Strawberry