【问题标题】:SQL IF statement with 3 alternativesSQL IF 语句有 3 种选择
【发布时间】:2012-08-21 08:36:45
【问题描述】:

嘿伙计们,我真的可以使用一些帮助来编写这个 IF 语句!我设法适应了其中的两个条件,不确定第三个(计算)如何适应。这是伪代码中的计算;

IF Producer_Type = 'Oil', Unallocated OIL&GAS = UnallocatedLossesOIL
IF Producer_Type = 'Gas', Unallocated OIL&GAS = UnallocatedLossesGAS
ELSE Unallocated OIL GAS = UnallocatedLossesOIL(MPPOil ÷ (MPPOil + MPPGas)) + 
UnallocatedLossesGAS(MPPGas ÷ (MPPOil + MPPGas))

这是我的代码:

SELECT qb1.CompanyName, qb1.AssetName, qb1.Year, 
IIf(qb1.Producer_Type='Oil',qb1.DatapointValue, qb2.DatapointValue) AS UnallocatedOilGas
FROM PEBaseQuery AS qb1 INNER JOIN PEBaseQuery AS qb2 ON qb1.Assetname=qb2.AssetName
WHERE qb1.DatapointID=2026 And qb2.DatapointID=2027;

其中 2026 的 DatapointID 是 UnallocatedLossesOIL,而 2027 是 UnallocatedLossesGAS。计算需要参考 MPPOil 和 MPPGas 值(与特定公司/资产/年份相关,它们是来自两个单独查询的结果...任何帮助将不胜感激!抱歉,如果其中一些没有意义......

【问题讨论】:

  • UnallocatedLossesOIL 是一个函数,还是您打算将其与括号相邻以暗示乘法?

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


【解决方案1】:

嵌套 if 条件怎么样?我的意思是,如果可能的话,这应该可行:

SELECT qb1.CompanyName, qb1.AssetName, qb1.Year, 
IIf(qb1.Producer_Type='Oil', qb1.DatapointValue, 
  IIF(qb1.Producer_Type='Gas', qb2.DatapointValue,
   qb1.DatapointValue * (MPPOil / (MPPOil + MPPGas)) + 
   qb2.DatapointValue * (MPPGas / (MPPOil + MPPGas)) )) AS UnallocatedOilGas
FROM PEBaseQuery AS qb1 INNER JOIN PEBaseQuery AS qb2 ON qb1.Assetname=qb2.AssetName
WHERE qb1.DatapointID=2026 And qb2.DatapointID=2027;

关于MPPGasMPPOil 的值,我不知道在哪里可以找到它们,所以保持原样。 我希望这行得通。

【讨论】:

  • +1 我认为case 可能更清晰,不确定Access 是否支持
猜你喜欢
  • 2018-06-27
  • 2010-09-21
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 2016-05-10
相关资源
最近更新 更多