2012-08-08 22 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