Je tam tolik věcí špatně, že je těžké vědět, kde začít.
Pletete si dvě formy CASE výraz. Jedna forma je:
CASE <expression>
WHEN <value> THEN <result>
WHEN <value> THEN <result>
...
END
druhý je:
CASE
WHEN <condition> THEN <result>
WHEN <condition> THEN <result>
...
END
Pokoušíte se použít SELECT dotaz jako hodnotu, ale chybí v něm FROM klauzule a musíte zabalit dotaz do závorek, abyste jej mohli použít jako hodnotu. Mám podezření, že jste chtěli, aby to bylo dotazování ze stejné tabulky, v takovém případě byste neměli provádět poddotaz, měli byste pouze použít funkci agregace v hlavním dotazu.
CASE výraz by měl být součástí SELECT seznam, nikoli za FROM doložka.
Pokud chcete ve výstupu pro každý případ vytvořit samostatné sloupce, nemohou být v jednom CASE výraz.
Všechny názvy tabulek a sloupců máte ve dvojitých uvozovkách, MySQL používá k uvozování názvů zpětné zaškrtnutí.
Nepotřebujete SELECT DISTINCT při použití GROUP BY .
V SELECT nemůžete odkazovat na alias seznam ve stejném dotazu, kromě GROUP BY , ORDER BY a HAVING .
Mělo by to být:
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