2012-08-23 19 views
5

मैं अपने एक्सेस डेटाबेस में एक्सेल से कुछ गणनाओं को स्थानांतरित करने की कोशिश कर रहा हूं, लेकिन जब मैं 5 इनपुट मानों का उपयोग करता हूं तो मुझे 'क्वेरी बहुत जटिल' त्रुटि का सामना करना पड़ रहा है। क्या मुझे क्वेरी को विभाजित करना चाहिए या इसके आसपास काम करने का एक और अधिक प्रभावी तरीका है ?? किसी भी सहायता की सराहना की जाएगी! यहाँ कोड है:क्वेरी बहुत जटिल

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 
+0

'' में qbX.DatapointValue' ऑपरेंड बाहर सपाट प्रयास करें (से ... कहां qbX.DatapointValue का चयन करें ... ।) एएस एक्सप्रैक्स'। – EthanB

+0

कुछ अलग सवाल .. आपको पहले DatapointValue के लिए 1000000 पर गुणा करने की आवश्यकता क्यों है? यह बहुत अजीब लग रहा है, क्योंकि मान एक कॉलम से हैं। मुझे लगता है कि पूरी क्वेरी को इसके बिना और अधिक सरल बनाने का तरीका है। – udalmik

+0

एक लाख से गुणा करने के कारण है क्योंकि मुझे प्रति मिलियन बैरल तेल – Magda

उत्तर

3

ऐसा लगता है कि, एक एकत्रीकरण क्वेरी की जरूरत के बजाय इस परिसर में एक के। जैसे

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

एकमात्र मुद्दा पहले डेटा प्वाइंट के लिए 1000000 गुणा कर रहा है। आपको लगता है कि के लिए IIF की कोशिश कर सकते:

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 

इसके अलावा इस तरह के 'पागल' क्वेरी, उप क्वेरी के साथ इस विशेष DatapointID के लिए, 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 तर्क के साथ गणना का उदाहरण। अंतिम पागल एसक्यूएल के साथ अपडेट किया गया। कृपया ध्यान दें कि मैं चीजों को इस तरह के लिए आवेदन तर्क या संग्रहित प्रक्रियाओं के साथ जाना होगा:

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 
+0

मूल्य की आवश्यकता है, मुझे यह नहीं देखा! – Fionnuala

+0

गुणा के लिए आप आईआईएफ में जोड़ सकते हैं, मुझे लगता है। – Fionnuala

+0

अपडेट करने का प्रयास किया गया) बाद में – udalmik

संबंधित मुद्दे