2011-12-12 118 views
0

DB2信息:Z/OS V9.1DB2如何使用SUM函數加入

我試圖創建一個從不同的表中選擇不同的列的查詢和表列的之一,我需要的總和。例如:

SELECT A.column1, B.*, SUM(C.Colum3) as col3 
    FROM schema.TableA A, schema.TableB B, schema.TableC C 
    WHERE A.column2 = B.column2 AND A.column1 = C.column1 
    GROUP BY A.column1; 

該查詢不起作用。我得到一個錯誤:

COLUMN OR EXPRESSION IN THE SELECT LIST IS NOT VALID. 

我試圖像這樣一個How can I sum a group of sums? SQL Server 2008

這是SQL Server不同的查詢例子,這樣可爲什麼它不工作。沒有很多DB2的例子。 :(

回答

1

因爲在SQL Server中以及其他所有主要RDBMS(在此不包括MySQL的怪癖)中都會遇到同樣的錯誤:您有GROUP BY子句中未包含的列或聚合的一部分,所以系統不知道如何處理它們(MySQL爲這些列返回一個隨機行,我想可能不是你想要的)

目前還不清楚你想要得到'總和'的,因爲你只列出了一個SUM()假設TableC是你需要聚集,使用公用表表達式(CTE),像這樣只表:

WITH Summed_TableC (column1, summedColumn) as (SELECT column1, SUM(column3) 
               FROM TableC 
               GROUP BY column1) 
SELECT a.Column1, b.*, c.summedColumn 
FROM schema.TableA as a 
JOIN schema.TableB as b 
ON b.column2 = a.column2 
JOIN Summed_TableC as c 
ON c.column1 = a.column1 

哦 - 從不使用隱式連接語法。你已經很好地限定了哪些表的哪些列來自哪裏,但是如果你不這樣做,這只是簡單的混淆。避免通過明確的JOIN表和它們的列。

+0

太棒了!謝謝!我得到了它的工作。 –