如何在mysql视图表中将行显示为列

时间:2015-08-08 06:36:12

标签: php mysql

您好我在代码点火器中尝试显示这样的表格我必须分别显示该公司的平均值

但是现在我们想要改变它的结构并将Rows转换成列。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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/>'; 

答案 2 :(得分:-1)

查询是:

从公司主管团体中选择年份,平均(总和(公司)),计数(公司);