我目前有一个具有以下格式的数据库:
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也必须更新。如果有办法实现自动化,那就更好了。
答案 0 :(得分:1)
您可以使用条件聚合执行此操作:
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;