首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL中编码此计算

如何在SQL中编码此计算
EN

Stack Overflow用户
提问于 2012-09-04 11:44:58
回答 1查看 146关注 0票数 0

我试图对Access中的计算进行编码,这涉及到一些值的和以及IF语句的结果。

下面是我正在处理的数据类型的表(来自‘CostBaseQuery’)

代码语言:javascript
复制
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),其中DatapointID IN (4032,4033,4035,4036,4037,4038,4039)

加上IF语句返回的值

如果(石油的比重为<=5或>20,使用ActiveOperatedWells值,否则为0)

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

代码语言:javascript
复制
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

任何帮助都将是非常感谢的,我希望这比我以前的闲谈更有意义!

EN

回答 1

Stack Overflow用户

发布于 2012-09-04 16:33:22

这个问题对其他用户并没有真正的帮助,您也不会陈述您的实际问题,但是如果我按照我喜欢的方式缩进您的查询,像这样,

代码语言:javascript
复制
SELECT
              b.CompanyName
            , b.AssetName
            , b.Year
            , (
                b.CalculationResult + 
                mp.CalculationResult
              ) AS NumberOfWellCompletions

    FROM
        (
            SELECT 
                          CompanyName
                        , AssetName
                        , Year
                        , SUM(q1.DatapointValue) AS CalculationResult 
                FROM
                        CostBaseQuery AS q1 
                WHERE
                        DatapointID in (
                            4032,
                            4033,
                            3036,
                            4035,
                            4038,
                            4037,
                            4034,
                            4039) 
                GROUP BY
                          CompanyName
                        , AssetName
                        , Year
        ) AS b 
    LEFT JOIN 
        (
            SELECT
                          CompanyName
                        , AssetName
                        , Year
                        , (
                            SUM(
                                IIF(
                                    qb2.DatapointValue>=5, 
                                    IIF(
                                        qb2.DatapointValue<20, 
                                        qb3.DatapointValue,
                                        0),
                                    0)
                          ) 
                FROM
                        CostBaseQuery qb3                   
                WHERE
                        qb3.CompanyName = qb2.CompanyName
                    AND 
                        qb3.AssetName = qb2.AssetName
                    AND
                        qb3.Year = qb2.Year 
                    AND
                        qb3.DatapointID = 4025                   
                GROUP BY 
                          CompanyName
                        , AssetName
                        , Year
        )
    // What is going on here, this doesn't make sense.
    ) AS CalculationResult 
FROM 
          CostBaseQuery AS qb2 
WHERE 
          DatapointID = 4058 
GROUP BY
            CompanyName
          , AssetName
          , Year
 ) AS mp 
    ON 
            (b.CompanyName = mp.CompanyName)
        AND 
            (b.AssetName = mp.AssetName)
        AND
            (b.Year = mp.Year);

我可以看到,您有错误的括号数,所以就像Access Parser说的那样,您有一个语法错误。

如果我想为您编写您的查询,我需要更多关于您的数据库shcema的信息。但是,您应该尝试编写一些可以解析的SQL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12262822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档