【发布时间】:2017-04-25 01:02:59
【问题描述】:
我想知道如何实现查询,它选择按clientid列分组的时间列WHERE子句从同一个表中除以月份和部门:
表格如下:
这里的目标是得到如下的最终结果:
结果 1.0
------------------------------
clientid | december| february
------------------------------
1 | 2:20 | 4:00
------------------------------
2 | 4:00 | 7:00
------------------------------
结果会以如下方式显示:
<table>
<thead>
<tr>
<th>Clientes</th>
<th>January</th>
<th>February</th>
</tr>
</thead>
<tbody>
<?php foreach($stmt as $row)
{
echo"
<tr>
<td>".$row['clientid']."</td>
<td>".$row['january']."</td>
<td>".$row['february']."</td>
</tr>"; }; ?>
</tbody>
</table>
在以下情况下的查询场景:
SELECT t.clientid, t.department,
(SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( `time` ) ) ) FROM time_management WHERE YEAR(date)='$year' AND MONTH(date)= 12 AND department = '$department' GROUP by clientid ) as january,
(SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( `time` ) ) ) FROM time_management WHERE YEAR(date)='$year' AND MONTH(date)= 2 AND department = '$department' GROUP by clientid ) as february
FROM time_management t WHERE t.department = '$department' GROUP by t.clientid
我收到错误:SQLSTATE[21000]: 基数违规:1242 子查询返回超过 1 行
由于子查询返回不止一行。
在子查询中没有 GROUP BY 的结果如下:
1 06:20:00 11:00:00
2 06:20:00 11:00:00
所以我的问题是如何构造查询以获得在 result 1.0
中显示的所需结果非常欢迎任何帮助。谢谢!
【问题讨论】:
-
有多年的你想怎么处理?所有 12 月都设置为 1 月,所有 2 月都设置为 2 月,甚至跨越数年?
-
MySQL pivot table的可能重复
-
您正在尝试执行的操作称为“数据透视表”。不幸的是 MySQL 似乎没有内置支持(与其他一些数据库不同),链接的问题有一些关于如何解决 PIVOT 缺失的信息。