2011-04-20 68 views
2

我有两个疑问,同样[GROUP BY]字段,但不同的(和)计算领域。PHP连接两个DB2资源语句

我想要么:

  1. 添加[查询#2] [字段3] [查询#1] [字段4],对于每一个 记录

  2. 创建一个新的数组以稍后检索具有[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。

回答

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 
; 
+0

有没有什么特别的关于你的'o'别名,还是你忘了把它放进去? – afuzzyllama 2011-04-21 02:53:37

+0

道歉...我忘了为outerquery添加o别名。它现在在那里。 – 2011-04-21 23:08:48