Too complex query

I am trying to transfer some calculations from Excel to an Access database, but I encountered a "Query too complex" error when I use more than 5 input values. Should I split the query or is there a more efficient way to deal with this? Any help would be appreciated! Here is the code:

SELECT qb1.CompanyName, qb1.Assetname, qb1.Year,
      ((qb1.DatapointValue*1000000)+qb2.DatapointValue+
        qb3.DatapointValue+qb4.DatapointValue+qb5.DatapointValue+
        qb6.DatapointValue) AS MPPOilRevised

FROM ((((((PEBaseQuery AS qb1 
INNER JOIN PEBaseQuery AS qb2 ON qb1.AssetName=qb2.AssetName) 
INNER JOIN PEBaseQuery AS qb3 ON qb1.AssetName=qb3.AssetName) 
INNER JOIN PEBaseQuery AS qb4 ON qb1.AssetName=qb4.AssetName) 
INNER JOIN PEBaseQuery AS qb5 ON qb1.AssetName=qb5.AssetName) 
INNER JOIN PEBaseQuery AS qb6 ON qb1.AssetName=qb6.AssetName))

WHERE qb1.DatapointID=2003 And qb2.DatapointID=2032 
      And qb3.DatapointID=2034 And qb4.DatapointID=2042 
      And qb5.DatapointID=2036 And qb6.DatapointID=2030;

CompanyName, Year, AssetName, DatapointID, DatapointName,   DatapointValue 
CompanyA,    2011, CAAsset1,  2005,        OIL,             170883.740972926 
CompanyA,    2011, CAAsset1,  2032,        Wellwork,        615913 
CompanyA,    2011, CAAsset1,  2034,        Annual shutdown, 0 
CompanyA,    2011, CAAsset1,  2042,        Export,          0 
CompanyA,    2011, CAAsset1,  2036,        Plant,           958387 
CompanyA,    2011, CAAsset1,  2030,        Reservoir,       2394231 
+5
source share
1 answer

It looks like you need an aggregation request, not such a complex one. For instance.

select companyName, assetName, year, 
   Sum(DatapointValue) as MPPOilRevised
from PEBaseQuery 
where DatapointID in (2032, 2034, 2042, 2036)
group by companyName, assetName, year

The only problem is multiplying by 1,000,000 for the first data point. You can try IIFfor this:

select companyName, assetName, year, 
   Sum(IIf(DatapointID=2003,DatapointValue*1000000,DatapointValue)) as MPPOilRevised
from PEBaseQuery 
where DatapointID in (2032, 2034, 2042, 2036)
group by companyName, assetName, year

Also try such a β€œcrazy” query with a sub-query for this particular DatapointID without IIF:

select companyName, assetName, year, SUM(DatapointValue) 
        + (select SUM(DatapointValue * 1000000) from  PEBaseQuery q2 
           where q2.companyName = q1.companyName 
              and q2.assetName= q1.assetName
              and q2.year= q1.year
              and q2.DatapointID = 2003
           group by companyName, assetName, year)
    from PEBaseQuery q1
    where DatapointID in (2032, 2034, 2042, 2036)
    group by companyName, assetName, year

" ". , :

select b.companyName, b.assetName, IIf(b.calculationResult > mp.calculationResult,b.calculationResult,mp.calculationResult)  as MPPOilRevised
from 
    (select companyName, assetName, year, Sum(IIf(DatapointID=2003,DatapointValue*1000000,DatapointValue)) as calculationResult
        from PEBaseQuery 
        where DatapointID in (2032, 2034, 2042, 2036) 
        group by companyName, assetName, year) b --Base
     left join 
     (select companyName, assetName, year, 
        Sum(DatapointValue) as calculationResult
        from PEBaseQuery 
        where DatapointID = 2218
        group by companyName, assetName, year) mp -- Max Potential
    on b.companyName= mp.companyName
        and b.assetName = mp.assetName
        and b.year = mp.year

substract. SQL. , :

    select b.companyName, b.assetName, IIf(b.calculationResult > mp.calculationResult,b.calculationResult,mp.calculationResult)  as MPPOilRevised
from 
    (select companyName, assetName, year, SUM(DatapointValue) 
        + (select SUM(DatapointValue * 1000000) from  PEBaseQuery q2 
           where q2.companyName = q1.companyName 
              and q2.assetName= q1.assetName
              and q2.year= q1.year
              and q2.DatapointID = 2003
           group by companyName, assetName, year)
        - (select SUM(DatapointValue) from  PEBaseQuery q2 
           where q2.companyName = q1.companyName 
              and q2.assetName= q1.assetName
              and q2.year= q1.year
              and q2.DatapointID = 2029 
           group by companyName, assetName, year)
    from PEBaseQuery q1
    where DatapointID in (2032, 2034, 2042, 2036)
    group by companyName, assetName, year) b --Base
     left join 
     (select companyName, assetName, year, 
        Sum(DatapointValue) as calculationResult
        from PEBaseQuery 
        where DatapointID = 2218
        group by companyName, assetName, year) mp -- Max Potential
    on b.companyName= mp.companyName
        and b.assetName = mp.assetName
        and b.year = mp.year
+3

All Articles