Es sind so viele Dinge falsch, dass es schwer ist zu wissen, wo man anfangen soll.
Sie verwechseln die beiden Formen von CASE
Ausdruck. Eine Form ist:
CASE <expression>
WHEN <value> THEN <result>
WHEN <value> THEN <result>
...
END
die andere ist:
CASE
WHEN <condition> THEN <result>
WHEN <condition> THEN <result>
...
END
Sie versuchen, ein SELECT
zu verwenden Abfrage als Wert, aber es fehlt der FROM
-Klausel und Sie müssen eine Abfrage in Klammern setzen, um sie als Wert zu verwenden. Ich vermute, Sie wollten, dass dies aus derselben Tabelle abgefragt wird. In diesem Fall sollten Sie keine Unterabfrage durchführen, sondern nur die Aggregationsfunktion in der Hauptabfrage verwenden.
Der CASE
Ausdruck sollte Teil von SELECT
sein Liste, nicht nach FROM
Klausel.
Wenn Sie für jeden Fall separate Spalten in der Ausgabe erstellen möchten, können diese nicht in einem CASE
sein Ausdruck.
Sie haben alle Ihre Tabellen- und Spaltennamen in doppelten Anführungszeichen, MySQL verwendet Backticks, um Namen in Anführungszeichen zu setzen.
Sie brauchen SELECT DISTINCT
nicht bei Verwendung von GROUP BY
.
Sie können in SELECT
nicht auf einen Alias verweisen Liste in derselben Abfrage, außer in GROUP BY
, ORDER BY
, und HAVING
.
Es sollte sein:
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