表达式中不能有聚合函数
您好我正在尝试做下面的qry,并且我不断收到subqry总和线上的“不能有表达式中的聚合函数”错误。任何方式使这项工作?表达式中不能有聚合函数
SELECT ID,
DateColumn,
Contamination,
BrokenGlass,
OtherReasons,
SUM(Contamination) + SUM(BrokenGlass) + SUM(OtherReasons) AS Total,
SUM(Contamination)/Total AS Expr1,
(SELECT SUM(Contamination)/ SUM(SUM(Contamination) + SUM(BrokenGlass) + SUM(OtherReasons))
FROM tbltest T2
WHERE T2.ID <= T2.ID) AS RunningSum
FROM tbltest
GROUP BY ID, DateColumn, Contamination, BrokenGlass, OtherReasons
SELECT ID,
DateColumn,
Contamination,
BrokenGlass,
OtherReasons,
SUM(Contamination) + SUM(BrokenGlass) + SUM(OtherReasons) AS Total,
SUM(Contamination)/Total AS Expr1,
/* CHANGED THIS LINE */
(SELECT SUM(Contamination)/ (SUM(Contamination) + SUM(BrokenGlass) + SUM(OtherReasons))
FROM tbltest T2
WHERE T2.ID <= T2.ID) AS RunningSum
FROM tbltest
GROUP BY ID, DateColumn, Contamination, BrokenGlass, OtherReasons
编辑
结果是不正确是比原先要求一个完全不同的问题,我将不得不采取在黑暗中刺在这一点,因为我什么都不知道你的项目,但在这里,你可能会让你开始朝正确的方向发展。
SELECT ID,
DateColumn,
Contamination,
BrokenGlass,
OtherReasons,
SUM(Contamination) + SUM(BrokenGlass) + SUM(OtherReasons) AS Total,
SUM(Contamination)/Total AS Expr1,
(
SELECT SUM(Contamination)/ (SUM(Contamination) + SUM(BrokenGlass) + SUM(OtherReasons))
FROM tbltest T2
WHERE T2.ID <= tbltest.ID
) AS RunningSum
FROM tbltest
GROUP BY ID, DateColumn, Contamination, BrokenGlass, OtherReasons
它给我错误的结果每行在运行总列中为0.588235 – user1342164 2012-08-08 14:26:31
复制了'WHERE T2.ID MatBailie 2012-08-08 14:32:29
@ user1342164我编辑了我的帖子。 – 2012-08-08 14:33:45
我猜你正在使用基于Expr1的MS-Access,请尝试以下操作。替换在查询中Total
别名使用和你不能SUM(SUM())
:
SELECT ID,
DateColumn,
Contamination,
BrokenGlass,
OtherReasons,
SUM(Contamination) + SUM(BrokenGlass) + SUM(OtherReasons) AS Total,
SUM(Contamination)/(SUM(Contamination) + SUM(BrokenGlass) + SUM(OtherReasons)) AS Expr1,
(SELECT SUM(Contamination)/ (SUM(Contamination) + SUM(BrokenGlass) + SUM(OtherReasons))
FROM tbltest T2
WHERE T2.ID <= tbltest.ID) AS RunningSum -- I think you want T2.ID <= tbltest.ID not T2.ID <= T2.ID
FROM tbltest
GROUP BY ID, DateColumn, Contamination, BrokenGlass, OtherReasons
仍然没有得到正确的结果?每行的值是.588235 – user1342164 2012-08-08 14:19:21
@ user1342164您可以使用一些示例数据编辑原始文章,然后编辑您需要的结果吗? – Taryn 2012-08-08 14:21:06
我需要以某种方式划分污染物的运行总量和Total的运行总和。因此,如果污染行1 = 7和行2 = 1,总行1 = 10和行2 = 1,它将分解8/11 – user1342164 2012-08-08 14:23:38
更改sum(sum())
只使用所产生的款项加法运算符:
--SUM(SUM(Contamination) + SUM(BrokenGlass) + SUM(OtherReasons))
(SUM(Contamination) + SUM(BrokenGlass) + SUM(OtherReasons))
此外,不要试图引用在同一个select
子句中的别名。可以使用子查询/派生表,也可以重复“总计”所需的计算。
--SUM(Contamination)/Total AS Expr1
SUM(Contamination)/(SUM(Contamination) + SUM(BrokenGlass) + SUM(OtherReasons))
把话说出来 - 但更快! – 2012-08-08 14:14:12
这是给我错误的结果每行是0.588235在运行总列 – user1342164 2012-08-08 14:21:00
@ user1342164 - 根据我对你的问题的评论...... WHERE T2.ID MatBailie 2012-08-08 14:31:35
你不能这样做'SUM(SUM('这样 – bfavaretto 2012-08-08 14:10:48
和警惕这种状况:?'WHERE T2.ID 2012-08-08 14:12:08
什么是欧尝试做你已经有'SUM + SUM ...',那么为什么外层的'SUM'? – bfavaretto 2012-08-08 14:12:10