1

こんにちは、以下のクエリを実行しようとしていますが、サブクエリの合計行で「式に集計関数を含めることはできません」というエラーが表示され続けます。これを機能させる方法はありますか?

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
4

3 に答える 3

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
于 2012-08-08T14:12:35.123 に答える
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))
于 2012-08-08T14:12:50.087 に答える
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
于 2012-08-08T14:13:20.820 に答える