我有两个查询,具有相同的[分组依据]字段,但不同的(总和)计算字段。
我想要:
将[查询#2] [字段3]添加到 [查询#1] [字段4],每一个 记录
创建一个新数组以便以后检索 数据,有[A1],[A2],[A3],[B4]。
然而,对于这两个方面,我需要知道记录的顺序完全相同。可能会从第二个资源语句中“选择”该记录,以便通过所有3个键值将其连接到原始记录。
$conn_resource = db2_connect ( "*LOCAL", "", "" );
$sql1 = "SELECT [A1], [A2], [A3], SUM([A4]) FROM [MyFile] WHERE [G] > 5 GROUP BY [A1], [A2], [A3] ";
$stmt1 = db2_prepare ( $conn_resource, $sql1 );
$sql2 = "SELECT [B1], [B2], [B3], SUM([B4]) FROM [MyFile] WHERE [G] > 5 GROUP BY [B1], [B2], [B3] ";
$stmt2 = db2_prepare ( $conn_resource, $sql2 );
if (! db2_execute ( $stmt1 ) || ! db2_execute ( $stmt2 )) {
//failure
}
while ( $row = &db2_fetch_array ( $stmt1 ) ) {
$sqlStatementTwoRow = db2_fetch_array ( $stmt2 );
$row[4] = $row[3] + $sqlStatementTwoRow[4];
}
上述示例在理论上应该有效,但我没有确认$ stmt2的记录与$ stmt1的记录完全相同。
修改 提供的答案似乎是解决方案,我越来越多地将该解决方案迁移到我的真实SQL语句中。
一旦我完成它,我将发布使用这个想法的完整的实时SQL。
答案 0 :(得分:2)
这可以更好地在数据库中实现,作为一个语句使用相关子查询将外部结果集显式连接到内部结果,然后计算总数。
我不确定下面的查询是否完全遵循您的业务规则,但希望此示例将向您展示如何从单个SQL语句中哄骗更多工作。
WITH outerquery ( a1, a2, a3, a4sum ) AS
(
SELECT a1, a2, a3, SUM( a4 ) FROM outerTable WHERE g > 5 GROUP BY a1, a2, a3
)
SELECT o.a1, o.a2, o.a3,
o.a4sum + o.a3 +
( SELECT SUM ( i.b4 ) FROM innerTable i
WHERE i.b1 = o.a1 AND i.b2 = o.a2 AND i.b3 = o.a3 AND g > 5
) AS totalaandb
FROM outerquery o
;