1

いくつかの値の合計とIFステートメントの結果を含む計算をAccessでコーディングしようとしています。

これが私が扱っている種類のデータの表です('CostBaseQueryから)

CompanyName Year    AssetName  DatapointID  Datapointname                DatapointValue
CompanyA    2011    AssetA     4025         Active operated wells           129
CompanyA    2011    AssetA     4058         API gravity of oil              38.5563255
CompanyA    2011    AssetA     4032         Number of gas lift wells        70
CompanyA    2011    AssetA     4033         Number of wells with ESPs       0
CompanyA    2011    AssetA     4036         Wells with CO2 production       25
CompanyA    2011    AssetA     4035         Wells with H2S production       9
CompanyA    2011    AssetA     4038         Wells with high pressure        0
CompanyA    2011    AssetA     4037         Wells with high temperature     0
CompanyA    2011    AssetA     4034         Wells with scale production     42
CompanyA    2011    AssetA     4039         Wells with wax                  0

計算はSUM(DatapointValue) WHERE DatapointID IN(4032,4033,4035,4036,4037,4038,4039)である必要があります

PLUSIFステートメントから返された値

IF(オイルのAPI比重<=5または>20、ActiveOperatedWellsの値を使用、Else 0)

次の方法を使用して計算をコーディングしようとしましたが、SUM計算を実行してからIFステートメントを実行するのではなく、SUMの各反復でデータを出力します。

SELECT qb1.CompanyName, qb1.AssetName, qb1.Year, 
(SUM(qb1.DatapointValue) 
+ IIF(qb2.DatapointValue>=5, 
       IIF(qb2.DatapointValue<20, qb3.DatapointValue, 0), 0)) 
AS NumberOfWellCompletions

FROM (CostBaseQuery AS qb1 
     INNER JOIN CostBaseQuery AS qb2 
          ON qb1.CompanyYearAssetID=qb2.CompanyYearAssetID) 
     INNER JOIN CostBaseQuery AS qb3 
          ON qb1.CompanyYearAssetID=qb3.CompanyYearAssetID

WHERE qb1.DatapointID IN (4032,4033,3036,4035,4038,4037,4034,4039)
AND qb2.DatapointID=4058 AND qb3.DatapointID=4025

GROUP BY qb1.CompanyName, qb1.AssetName, qb1.Year, 
qb1.DatapointValue, qb2.DatapointValue, qb3.DatapointValue

どんな助けでも大歓迎です、そして私はこれが私の以前のとりとめのないことよりも理にかなっていることを願っています!

4

2 に答える 2

0

DatapointValueこれらは個々の値であり、合計を探しているため、グループ化する必要はないと思います。

次のように変更してみてくださいGROUP BY

GROUP BY qb1.CompanyName, qb1.AssetName, qb1.Year
于 2012-09-05T14:16:35.823 に答える
0
SUM(qb1.DatapointValue + IIF(ab2.DatapointValue <=5 AND qb2.DatapointValue > 20, qb3.DatapointValue, 0)) as NumberOfWellCompletions
...

GROUP BY qb1.CompanyName, qb1.AssetName, qb1.Year

SUMを単純化することができます(合計したいものが明確ではありませんが、角かっこに問題がある可能性があります)

<= 5または>=5(質問のテキストとコードの違い)を確認する必要があるかどうかを明確にする必要があります

GROUPBYを変更する必要があります

于 2012-09-05T14:17:05.480 に答える