Ci sono così tante cose che non vanno, è difficile sapere da dove cominciare.
Stai confondendo le due forme di CASE
espressione. Un modulo è:
CASE <expression>
WHEN <value> THEN <result>
WHEN <value> THEN <result>
...
END
l'altro è:
CASE
WHEN <condition> THEN <result>
WHEN <condition> THEN <result>
...
END
Stai cercando di utilizzare un SELECT
query come valore, ma manca il FROM
clausola e devi racchiudere una query tra parentesi per usarla come valore. Sospetto che tu volessi che questa interrogasse dalla stessa tabella, nel qual caso non dovresti fare una sottoquery, dovresti semplicemente usare la funzione di aggregazione nella query principale.
Il CASE
l'espressione dovrebbe far parte di SELECT
elenco, non dopo il FROM
clausola.
Se desideri creare colonne separate nell'output per ogni caso, non possono trovarsi in un CASE
espressione.
Hai tutti i nomi delle tabelle e delle colonne tra virgolette doppie, MySQL usa i backtick per citare i nomi.
Non hai bisogno di SELECT DISTINCT
quando si utilizza GROUP BY
.
Non puoi fare riferimento a un alias in SELECT
list nella stessa query, eccetto in GROUP BY
, ORDER BY
e HAVING
.
Dovrebbe essere:
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