2011-12-12 43 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

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