Há tantas coisas erradas, é difícil saber por onde começar.
Você está misturando as duas formas de
CASE
expressão. Uma forma é:CASE <expression>
WHEN <value> THEN <result>
WHEN <value> THEN <result>
...
END
o outro é:
CASE
WHEN <condition> THEN <result>
WHEN <condition> THEN <result>
...
END
Você está tentando usar um
SELECT
query como um valor, mas está faltando o FROM
cláusula e você precisa envolver uma consulta entre parênteses para usá-la como um valor. Suspeito que você queria que isso fosse consultando na mesma tabela, nesse caso você não deveria estar fazendo uma subconsulta, você deveria apenas usar a função de agregação na consulta principal. O
CASE
expressão deve fazer parte do SELECT
lista, não após o FROM
cláusula. Se você deseja criar colunas separadas na saída para cada caso, elas não podem estar em um
CASE
expressão. Você tem todos os nomes de suas tabelas e colunas entre aspas duplas, o MySQL usa acentos graves para citar nomes.
Você não precisa de
SELECT DISTINCT
ao usar GROUP BY
. Você não pode fazer referência a um alias no
SELECT
list na mesma consulta, exceto em GROUP BY
, ORDER BY
, e HAVING
. Deveria 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