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动态透视”。