Det är så många saker som är fel, det är svårt att veta var man ska börja.
Du blandar ihop de två formerna av CASE
uttryck. Ett formulär är:
CASE <expression>
WHEN <value> THEN <result>
WHEN <value> THEN <result>
...
END
den andra är:
CASE
WHEN <condition> THEN <result>
WHEN <condition> THEN <result>
...
END
Du försöker använda en SELECT
fråga som ett värde, men den saknar FROM
och du måste linda en fråga inom parentes för att använda den som ett värde. Jag misstänker att du ville att det här skulle fråga från samma tabell, i så fall borde du inte göra en underfråga, du ska bara använda aggregeringsfunktionen i huvudfrågan.
CASE
uttryck bör vara en del av SELECT
lista, inte efter FROM
klausul.
Om du vill skapa separata kolumner i utdata för varje fall kan de inte vara i ett CASE
uttryck.
Du har alla dina tabell- och kolumnnamn inom dubbla citattecken, MySQL använder backticks för att citera namn.
Du behöver inte SELECT DISTINCT
när du använder GROUP BY
.
Du kan inte referera till ett alias i SELECT
lista i samma fråga, utom i GROUP BY
, ORDER BY
, och HAVING
.
Det ska vara:
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