2012-08-08 112 views
1

您好我正在尝试做下面的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 
+0

你不能这样做'SUM(SUM('这样 – bfavaretto 2012-08-08 14:10:48

+0

和警惕这种状况:?'WHERE T2.ID <= T2.ID' – 2012-08-08 14:12:08

+0

什么是欧尝试做你已经有'SUM + SUM ...',那么为什么外层的'SUM'? – bfavaretto 2012-08-08 14:12:10

回答

1
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

它给我错误的结果每行在运行总列中为0.588235 – user1342164 2012-08-08 14:26:31

+0

复制了'WHERE T2.ID <= T2.ID'。应该是'WHERE T2.ID <= tbltest.ID'。 – MatBailie 2012-08-08 14:32:29

+0

@ user1342164我编辑了我的帖子。 – 2012-08-08 14:33:45

3

我猜你正在使用基于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 
+0

仍然没有得到正确的结果?每行的值是.588235 – user1342164 2012-08-08 14:19:21

+1

@ user1342164您可以使用一些示例数据编辑原始文章,然后编辑您需要的结果吗? – Taryn 2012-08-08 14:21:06

+0

我需要以某种方式划分污染物的运行总量和Total的运行总​​和。因此,如果污染行1 = 7和行2 = 1,总行1 = 10和行2 = 1,它将分解8/11 – user1342164 2012-08-08 14:23:38

2

更改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)) 
+0

把话说出来 - 但更快! – 2012-08-08 14:14:12

+0

这是给我错误的结果每行是0.588235在运行总列 – user1342164 2012-08-08 14:21:00

+0

@ user1342164 - 根据我对你的问题的评论...... WHERE T2.ID <= T2.ID'?你是指'WHERE T2.ID <= tbltest.ID'? – MatBailie 2012-08-08 14:31:35