Der er så mange ting galt, det er svært at vide, hvor man skal begynde.
Du blander de to former for CASE
udtryk. En formular er:
CASE <expression>
WHEN <value> THEN <result>
WHEN <value> THEN <result>
...
END
den anden er:
CASE
WHEN <condition> THEN <result>
WHEN <condition> THEN <result>
...
END
Du forsøger at bruge en SELECT
forespørgsel som en værdi, men den mangler FROM
klausul, og du skal pakke en forespørgsel i parentes for at bruge den som en værdi. Jeg formoder, at du ville have dette til at forespørge fra den samme tabel, i hvilket tilfælde du ikke skulle lave en underforespørgsel, du skulle bare bruge aggregeringsfunktionen i hovedforespørgslen.
CASE
udtryk skal være en del af SELECT
liste, ikke efter FROM
klausul.
Hvis du vil oprette separate kolonner i outputtet for hver sag, kan de ikke være i én CASE
udtryk.
Du har alle dine tabel- og kolonnenavne i dobbelte anførselstegn, MySQL bruger backticks til at citere navne.
Du behøver ikke SELECT DISTINCT
når du bruger GROUP BY
.
Du kan ikke henvise til et alias i SELECT
liste i den samme forespørgsel, undtagen i GROUP BY
, ORDER BY
, og HAVING
.
Det skal være:
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