我创建了一个带有php
后端的mysql
页面,以显示包含员工姓名,月份,订单的小型表格的结果:
<table border="1" cellpadding="1" cellspacing="1">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Month</th>
<th scope="col">Cases</th>
</tr>
</thead>
<?php do { ?>
<tbody>
<tr>
<td><?php echo $row_rsChart2['ContactFullName']; ?></td>
<td><?php echo $row_rsChart2['Month']; ?></td>
<td><?php echo $row_rsChart2['Cases']; ?></td>
</tr>
</tbody>
<?php } while ($row_rsChart2 = mysql_fetch_assoc($rsChart2)); ?>
</table>
我是否可以使用月份列作为标题,在列标题中从左到右显示Jan,Feb,March等,每个月的情况作为数据?
Jan - Feb - Mar User1 100 47 89 user2 86 67 134
使用默认布局时,它显示为:
Name - Month - Cases User1 Jan 100 User1 Feb 47 User2 Jan 67
答案 0 :(得分:2)
MySQL对此类数据透视没有任何原生支持。您有几个选择:
构建一个相当可怕的MySQL查询来手动执行旋转操作:
SELECT *
FROM (
SELECT StaffName, SUM(NumOrders) AS January
FROM Orders
WHERE Month = 'January'
GROUP BY StaffName
) AS tJan
NATURAL JOIN (
SELECT StaffName, SUM(NumOrders) AS February
FROM Orders
WHERE Month = 'February'
GROUP BY StaffName
) AS tFeb
NATURAL JOIN (
-- etc.
如果您选择沿着这条路走下去,可以使用PHP中的循环结构或MySQL中的预准备语句自动生成此查询,从而使您的生活更轻松。
执行上述操作作为一次性操作,以便更改MySQL数据库的结构以更接近地反映这种所需的布局(一旦转换表格很容易,但可能会影响数据库的其他用途): / p>
CREATE TABLE NewOrders (PRIMARY KEY('StaffName'))
SELECT * FROM (
-- etc. as above
或者,你可以创建一个VIEW
,这是一种基于底层表以这种方式构建的“虚拟表”。
使用PHP手动旋转数据(繁琐)。