SQL条件求和

时间:2012-09-05 14:12:20

标签: sql ms-access-2010 calculated-columns

我试图在Access中编写一个涉及某些值的SUM加上IF语句结果的计算。

这是我正在处理的数据类型表(来自'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)

加上IF语句

返回的值

IF(油的API重力< = 5或> 20,使用ActiveOperatedWells的值,Else 0)

我尝试使用以下方法对计算进行编码,但它会在SUM的每次迭代中输出数据,而不是执行SUM计算,然后执行IF语句。

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

任何帮助都会非常感激,我希望这比我以前的漫无边际更有意义!

2 个答案:

答案 0 :(得分:0)

我认为您不想按DatapointValue分组,因为这些是个别值,而您正在寻找总和。

尝试将GROUP BY更改为:

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

答案 1 :(得分: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(问题中的文字和代码之间的差异),您必须清楚

您必须更改GROUP BY

相关问题