Php 在子查询或逃避子查询中选择多行
我想知道如何实现查询,从同一个表中选择按clientid列分组的时间和列,其中子句除以月份和部门: 表如下:Php 在子查询或逃避子查询中选择多行,php,mysql,sql,Php,Mysql,Sql,我想知道如何实现查询,从同一个表中选择按clientid列分组的时间和列,其中子句除以月份和部门: 表如下: 1 06:20:00 11:00:00 2 06:20:00 11:00:00 这里的目标是获得如下最终结果: 1 06:20:00 11:00:00 2 06:20:00
1 06:20:00 11:00:00
2 06:20:00 11:00:00
这里的目标是获得如下最终结果:
1 06:20:00 11:00:00
2 06:20:00 11:00:00
结果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>
我得到错误:SQLSTATE[21000]:基数冲突:1242子查询返回超过1行
因为子查询返回多行
如果子查询中没有GROUP BY,则结果如下:
1 06:20:00 11:00:00
2 06:20:00 11:00:00
因此,我的问题是如何构造查询以获得结果1.0中显示的所需结果
------------------------------
clientid | december| february
------------------------------
1 | 2:20 | 4:00
------------------------------
2 | 4:00 | 7:00
------------------------------
欢迎任何帮助。谢谢大家! 不需要使用子查询。您可以使用条件聚合:
选择SUM(如果月份(`date`)=2,则选择TIME到秒(`TIME`),否则选择0结束)作为二月,
总和(如果月份(`date`)=12,则时间为秒(`TIME`),否则为0结束)为12月
从时间管理
其中t.department=“$department”
按客户分组
通过这种方式,您可以计算一年中每个月的时间总和。无需使用子查询。您可以使用条件聚合:
选择SUM(如果月份(`date`)=2,则选择TIME到秒(`TIME`),否则选择0结束)作为二月,
总和(如果月份(`date`)=12,则时间为秒(`TIME`),否则为0结束)为12月
从时间管理
其中t.department=“$department”
按客户分组
通过这种方法,您可以计算一年中每个月的时间总和。尝试使用以下方法:
SELECT SUM( CASE WHEN MONTH(`date`) = 2 THEN TIME_TO_SEC( `time` ) ELSE 0 END) AS February,
SUM( CASE WHEN MONTH(`date`) = 12 THEN TIME_TO_SEC( `time` ) ELSE 0 END) AS December
FROM time_management
WHERE t.department = '$department'
GROUP BY clientid
尝试使用以下方法:
SELECT SUM( CASE WHEN MONTH(`date`) = 2 THEN TIME_TO_SEC( `time` ) ELSE 0 END) AS February,
SUM( CASE WHEN MONTH(`date`) = 12 THEN TIME_TO_SEC( `time` ) ELSE 0 END) AS December
FROM time_management
WHERE t.department = '$department'
GROUP BY clientid
您在第一个查询中是否有输入错误?2而不是12?或者这是故意的?想法是同时选择2个月。二月和十二月。该案例是否只选择两个月中的一个月?@davejal
2
用于2月
,而12
用于12月
。我之所以将这些月包括在内,是因为OP@JohnSiniger每个案例
计算一个月的总和
。您可以包含12
单独的案例
,以计算每个月的总和。@johnsinger使用秒到秒时间
您在第一次查询中有输入错误吗?2而不是12?或者这是故意的?想法是同时选择2个月。二月和十二月。该案例是否只选择两个月中的一个月?@davejal2
用于2月
,而12
用于12月
。我之所以将这些月包括在内,是因为OP@JohnSiniger每个案例
计算一个月的总和
。您可以包含12
单独的案例
,以便计算每个月的总和。@johnsinger使用秒到秒时间
当您有多年的时间时,您希望如何处理?所有12月都设置为1月,所有2月都设置为2月,甚至跨越数年?可能重复您尝试执行的操作称为“透视表”。不幸的是,MySQL似乎没有内置支持(与其他一些DBs不同),链接的问题中有一些关于如何解决缺少PIVOT的问题的信息。当您有多年的工作经验时,您希望如何处理?所有12月都设置为1月,所有2月都设置为2月,甚至跨越数年?可能重复您尝试执行的操作称为“透视表”。不幸的是,MySQL似乎没有对此的内置支持(与其他一些DBs不同),链接的问题有一些关于如何解决缺少PIVOT的问题的信息。