【问题标题】:SQL Conditional SummingSQL 条件求和
【发布时间】:2012-09-05 14:12:19
【问题描述】:

我试图在 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比重20,使用ActiveOperatedWells的值,否则为0)

我尝试使用以下方法对计算进行编码,但它在 SUM 的每次迭代中输出数据,而不是执行 SUM 计算和 THEN 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

任何帮助将不胜感激,我希望这比我之前的漫无边际更有意义!

【问题讨论】:

  • 但是,它仍在构建一个应用程序,一次只解决一个高度本地化的问题。
  • 我正在尝试将 200 多个计算从 Excel 模型转移到 Access 模型中,而我的 SQL 技能并不出色,因此这是个奇怪的问题

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


【解决方案1】:
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(好吧,不清楚您想要总结什么,但您可能会遇到括号问题)

如果需要检查&lt;= 5&gt;=5(你的问题中的文本和代码之间的差异),你必须清楚

您必须更改您的 GROUP BY

【讨论】:

  • 谢谢,我已经简化了我的 IF 语句,但是 GROUP BY 编辑会导致聚合错误
  • @Magda 好吧,如果您复制代码的第一部分(SUM),GROUP BY 问题也应该消失(您的 SUM 似乎有括号问题)。或者也许只删除 GROUP BY 中的 qb1.DatapointValue
【解决方案2】:

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

尝试将GROUP BY 更改为:

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

【讨论】:

  • 我最初尝试过,但我得到一个错误,我试图执行一个不包括 [我的计算] 作为聚合函数一部分的查询'
猜你喜欢
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多