DB2 info:z / OS v9.1
我正在尝试创建一个查询,从不同的表中选择不同的列,其中一个表列我需要总和。例如:
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没有很多例子。 :(
答案 0 :(得分: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
表及其列来避免这种情况。