बहुत सी चीजें गलत हैं, यह जानना मुश्किल है कि कहां से शुरू करें।
आप CASE
. के दो रूपों को मिला रहे हैं अभिव्यक्ति। एक रूप है:
CASE <expression>
WHEN <value> THEN <result>
WHEN <value> THEN <result>
...
END
दूसरा है:
CASE
WHEN <condition> THEN <result>
WHEN <condition> THEN <result>
...
END
आप एक SELECT
. का उपयोग करने का प्रयास कर रहे हैं एक मान के रूप में क्वेरी करें, लेकिन इसमें FROM
. मौजूद नहीं है क्लॉज और आपको एक क्वेरी को मूल्य के रूप में उपयोग करने के लिए कोष्ठक में लपेटना होगा। मुझे संदेह है कि आप इसे उसी तालिका से पूछताछ करना चाहते थे, इस मामले में आपको सबक्वायरी नहीं करनी चाहिए, आपको मुख्य क्वेरी में केवल एकत्रीकरण फ़ंक्शन का उपयोग करना चाहिए।
CASE
एक्सप्रेशन SELECT
. का हिस्सा होना चाहिए सूची, FROM
. के बाद नहीं खंड।
यदि आप प्रत्येक मामले के लिए आउटपुट में अलग कॉलम बनाना चाहते हैं, तो वे एक CASE
में नहीं हो सकते हैं अभिव्यक्ति।
आपके सभी टेबल और कॉलम नाम दोहरे उद्धरण चिह्नों में हैं, MySQL नामों को उद्धृत करने के लिए बैकटिक्स का उपयोग करता है।
आपको SELECT DISTINCT
. की आवश्यकता नहीं है GROUP BY
. का उपयोग करते समय ।
आप SELECT
. में किसी उपनाम का उल्लेख नहीं कर सकते GROUP BY
. को छोड़कर, उसी क्वेरी में सूची बनाएं , ORDER BY
, और HAVING
।
यह होना चाहिए:
SELECT MONTH(Facturation) AS month, LRU, Client,
AVG(CASE WHEN MONTH(Factuation) = 1 AND Facturation BETWEEN 1 AND 6
THEN Montant_fac_eur END) AS c1,
AVG(CASE WHEN MONTH(Factuation) = 2 AND Facturation BETWEEN 2 AND 7
THEN Montant_fac_eur END) AS c2,
AVG(CASE WHEN MONTH(Factuation) = 3 AND Facturation BETWEEN 3 AND 8
THEN Montant_fac_eur END) AS c3,
AVG(CASE WHEN MONTH(Factuation) = 4 AND Facturation BETWEEN 4 AND 9
THEN Montant_fac_eur END) AS c4,
...
FROM foundry_sync.data
GROUP BY `LRU`, `Client`, `Facturation`
ORDER BY Client, month