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