मेरे पास दो टेबल हैं जिनमें दो विजेट्स के उत्पादन के बारे में जानकारी है। Table1 ऐसा दिखता है:

c

तालिका 2 इस तरह दिखती है:

enter image description here

मैं देश कोड (ADM0_A3) द्वारा प्रत्येक विजेट और डिस्प्ले के औसत उत्पादन की गणना करना चाहता हूं, ताकि परिणाम कुछ इस तरह दिखें (इस स्तर पर लापता डेटा के बारे में परेशान नहीं है। बीडब्ल्यूए में विजेट का कोई उत्पादन नहीं है)

ADM0_A3   w1avg   w2avg
DZA      50000  3450000
AGO      86000    40000
BWA      blank        0
CMR       3500    blank

मैं जिस एमएस एक्सेस एसक्यूएल क्वेरी का उपयोग कर रहा हूं वह यहां है:

SELECT Z.ccode, Z.ave_w1, A.ave_w2 
FROM 
(
    SELECT X.ADM0_A3 as ccode, 0.02 * X.sum_w1 / X.n_w1 AS ave_w1 
    FROM 
    (
        SELECT t1.ADM0_A3, SUM(t1.production) AS sum_w1, COUNT(t1.production) as n_w1 
        FROM Table1 t1
        GROUP BY t1.ADM0_A3
    ) X
) Z
JOIN
( 
    SELECT Y.ADM0_A3, 0.025 * Y.sum_w2 / Y.n_w2 AS ave_w2
    FROM 
    (
        SELECT t2.ADM0_A3, SUM(t2.production) AS sum_w2, COUNT(t2.production) as n_w2 
        FROM Table2 t2
        GROUP BY t2.ADM0_A3
    ) Y
) A
ON A.ADM0_A3 = Z.ccode

मैंने उप-प्रश्नों की जाँच की और वे ठीक काम करते हैं। हालांकि, जब मैं प्रश्नों में शामिल होने का प्रयास करता हूं तो मुझे यह त्रुटि संदेश "Syntax error in FROM clause" मिलता है। मुझे लगता है कि समाधान काफी सरल है, लेकिन मैं इसे अभी नहीं देख सकता, इसलिए किसी भी सुझाव की सराहना करेंगे। अग्रिम में धन्यवाद!

0
PetGriffin 31 जिंदा 2020, 13:47

1 उत्तर

सबसे बढ़िया उत्तर

आप ऐसा करने का प्रयास कर सकते हैं:

SELECT adm0_a3, MAX(w1avg) as w1avg, MAX(w2avg) as w2avg
FROM (SELECT t1.ADM0_A3, AVG(t1.production) * 0.02 as w1avg, NULL as w2avg
      FROM Table1 as t1
      GROUP BY t1.ADM0_A3
      UNION ALL
      SELECT t2.ADM0_A3, NULL, AVG(t2.production) * 0.02 as w1avg
      FROM Table1 as t2
      GROUP BY t2.ADM0_A3
     ) as t
GROUP BY adm0_a3;

मुझे यकीन नहीं है कि एमएस एक्सेस के सभी संस्करण FROM क्लॉज में UNION ALL का समर्थन करते हैं। यदि नहीं, तो आप एक दृश्य का उपयोग करके उसके आसपास काम कर सकते हैं।

1
Gordon Linoff 31 जिंदा 2020, 13:51