Hay tantas cosas mal que es difícil saber por dónde empezar.
Estás mezclando las dos formas de CASE
expresión. Una forma es:
CASE <expression>
WHEN <value> THEN <result>
WHEN <value> THEN <result>
...
END
el otro es:
CASE
WHEN <condition> THEN <result>
WHEN <condition> THEN <result>
...
END
Estás intentando usar un SELECT
consulta como un valor, pero falta el FROM
cláusula y debe envolver una consulta entre paréntesis para usarla como valor. Sospecho que quería que esto se consultara desde la misma tabla, en cuyo caso no debería estar haciendo una subconsulta, solo debería usar la función de agregación en la consulta principal.
El CASE
expresión debe ser parte de SELECT
lista, no después del FROM
cláusula.
Si desea crear columnas separadas en la salida para cada caso, no pueden estar en un CASE
expresión.
Tiene todos los nombres de sus tablas y columnas entre comillas dobles, MySQL usa acentos graves para citar nombres.
No necesitas SELECT DISTINCT
al usar GROUP BY
.
No puede hacer referencia a un alias en el SELECT
list en la misma consulta, excepto en GROUP BY
, ORDER BY
, y HAVING
.
Debería ser:
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