2011-04-20 85 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