0

重複の可能性:
クエリ間でフィールド値を参照する

実行すると同じエラーが発生する3つの同様のクエリがあります

You tried to execute a query that does not include the specified expression 'CompanyName' as part of an aggregate function

問題は理解できましたが、解決方法がわかりません。3つのクエリのうちの1つを次に示します。

    SELECT qb1.CompanyName, qb1.AssetName, qb1.Year, 
    (qb2.MPPOil-SUM(IIf(qb1.DatapointID=2003,
qb1.DatapointValue*1000000,
qb1.DatapointValue))) AS UnallocatedLossesOIL

    FROM PEBaseQuery AS qb1 
    INNER JOIN PE_MPPOilRevised AS qb2 
    ON qb1.AssetName = qb2.AssetName
    WHERE qb1.DatapointID In (2032,2034,2042,2036,2030,2028);

これは計算に基づいています:

未割り当て損失=MPP-(GAS×1000000)-(ウェルワーク+年間シャットダウンメンテナンス+エクスポート+プラント+貯水池損失)

スムーズに実行される別のテーブルで同様の構文を使用しました:Sコードは次のとおりです。

SELECT qb1.CompanyName, qb1.AssetName, qb1.Year, (qb1.DatapointValue/qb2.DatapointValue)*1000000 AS TRIPerMillionManHours
FROM HSEBaseQuery AS qb1 
INNER JOIN HSEBaseQuery AS qb2 
ON qb1.Assetname=qb2.AssetName
WHERE qb2.DatapointID=310005 AND qb1.DatapointID<>qb2.DatapointID;

なぜ一方が機能し、もう一方が機能しないのですか?助けてください!

4

1 に答える 1

2

最初のクエリには集計関数が含まれており、合計される計算値の一部ではないものは、group by 句内に含める必要があります。

SELECT qb1.CompanyName
       , qb1.AssetName
       , qb1.Year
       , (qb2.MPPOil - SUM( IIf( qb1.DatapointID=2003,
                                 qb1.DatapointValue*1000000,
                                 qb1.DatapointValue))) AS UnallocatedLossesOIL
FROM  PEBaseQuery AS qb1 
      INNER JOIN PE_MPPOilRevised AS qb2 ON qb1.AssetName = qb2.AssetName
WHERE qb1.DatapointID In (2032,2034,2042,2036,2030,2028)
GROUP BY qb1.CompanyName
         , qb1.AssetName
         , qb1.Year
         , qb2.MPPOil;

HansUp が言ったように、2 番目のクエリには集計関数 sum() が含まれていないため、group by は必要ありません。

于 2012-08-28T15:10:52.430 に答える