Il y a tellement de choses qui ne vont pas qu'il est difficile de savoir par où commencer.
Vous mélangez les deux formes de CASE
expression. Un formulaire est :
CASE <expression>
WHEN <value> THEN <result>
WHEN <value> THEN <result>
...
END
l'autre est :
CASE
WHEN <condition> THEN <result>
WHEN <condition> THEN <result>
...
END
Vous essayez d'utiliser un SELECT
requête en tant que valeur, mais il manque le FROM
clause et vous devez envelopper une requête entre parenthèses pour l'utiliser comme valeur. Je suppose que vous vouliez que cela interroge à partir de la même table, auquel cas vous ne devriez pas faire de sous-requête, vous devez simplement utiliser la fonction d'agrégation dans la requête principale.
Le CASE
l'expression doit faire partie du SELECT
liste, pas après le FROM
clause.
Si vous souhaitez créer des colonnes distinctes dans la sortie pour chaque cas, elles ne peuvent pas être dans un seul CASE
expression.
Vous avez tous vos noms de table et de colonne entre guillemets doubles, MySQL utilise des backticks pour citer les noms.
Vous n'avez pas besoin de SELECT DISTINCT
lors de l'utilisation de GROUP BY
.
Vous ne pouvez pas faire référence à un alias dans le SELECT
list dans la même requête, sauf dans GROUP BY
, ORDER BY
, et HAVING
.
Cela devrait être :
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