Php 将MYSQL数据库的行转换为列

Php 将MYSQL数据库的行转换为列,php,mysql,pivot-table,Php,Mysql,Pivot Table,我目前有一个数据库,其格式如下: ID | Year | Name | Address | Penalty 1 | 2015 | Test 1 | Test 1 | 0.2 2 | 2014 | Test 1 | Test 1 | 0.3 3 | 2013 | Test 1 | Test 1 |

我目前有一个数据库,其格式如下:

ID    |    Year    |    Name    |    Address    |    Penalty
1     |    2015    |   Test 1   |    Test 1     |     0.2 
2     |    2014    |   Test 1   |    Test 1     |     0.3 
3     |    2013    |   Test 1   |    Test 1     |     0.4 
4     |    2015    |   Test 2   |    Test 2     |     0.5 
5     |    2014    |   Test 2   |    Test 2     |     0.6 
6     |    2015    |   Test 3   |    Test 3     |     0.7 
我试图做的是编写一个查询,该查询将生成与以下类似的格式:

ID    |    Name    |    Address    |    2015Penalty    |    2014Penalty    |    2013Penalty
1     |   Test 1   |    Test 1     |        0.2        |        0.3        |       0.4
2     |   Test 1   |    Test 1     |        0.5        |        0.6        |       0.2
3     |   Test 1   |    Test 1     |        0.7        |        0.8        |       0.3
基本上不是每个公司每年都有一行,我需要每个公司都有一行,然后是一列每年的罚款

这可能吗?如果可能的话,我想完全用SQL来做,因为行基本上会被回送到一个页面上,它会变成一个Excel电子表格:

while($row = mysqli_fetch_assoc($res)) {
    if(!$flag) {
        // display field/column names as first row
        echo implode("\t", array_keys($row)) . "\r\n";
        $flag = true;
    }
    array_walk($row, 'cleanData');
    echo implode("\t", array_values($row)) . "\r\n";
}
我一直在尝试,看看是否有一种方法可以在PHP中做到这一点,但我也不确定如何做到这一点,所以非常感谢任何帮助。如果有任何进一步的澄清是必要的,请让我知道

编辑


我可能应该更具体一点,我希望它能够根据年份自动生成列,因为每年都会导入更多的数据,然后SQL也必须更新。如果有一种方法可以自动执行此操作,那会更好。

您可以使用条件聚合来执行此操作:

select id, name, address,
       max(case when year = 2015 then penalty end) as penalty2015,
       max(case when year = 2014 then penalty end) as penalty2014
from table t
group by id, name, address;

你所描述的叫做旋转,我不知道!对于SQL查询来说,这是一个初学者,现在就去谷歌吧,谢谢。这么多行话,这么少时间!如果不能保证这一年的到来,这会起作用吗?此外,我是否必须为每一年编写一个新的
max
,或者有没有办法实现自动化?@BrandonShega。事实上,是的。当年份不存在时,它将给出一个值
NULL
。如果您想要0,您可以添加
else 0
。我在上面编辑了我的问题,抱歉,但是它是否可以根据年份生成列标题,而不是我每年创建一个案例?这是一个非常不同的问题。谷歌:“MySQL动态透视”。