Jest tak wiele rzeczy nie tak, że nie wiadomo, od czego zacząć.
Mieszasz dwie formy CASE
wyrażenie. Jeden formularz to:
CASE <expression>
WHEN <value> THEN <result>
WHEN <value> THEN <result>
...
END
drugi to:
CASE
WHEN <condition> THEN <result>
WHEN <condition> THEN <result>
...
END
Próbujesz użyć SELECT
zapytanie jako wartość, ale brakuje w nim FROM
klauzuli i musisz umieścić zapytanie w nawiasach, aby użyć go jako wartości. Podejrzewam, że chciałeś, aby to było zapytanie z tej samej tabeli, w takim przypadku nie powinieneś wykonywać podzapytania, powinieneś po prostu użyć funkcji agregacji w głównym zapytaniu.
CASE
wyrażenie powinno być częścią SELECT
listy, a nie po FROM
klauzula.
Jeśli chcesz utworzyć oddzielne kolumny w danych wyjściowych dla każdego przypadku, nie mogą one znajdować się w jednym CASE
wyrażenie.
Masz wszystkie nazwy tabel i kolumn w podwójnych cudzysłowach, MySQL używa backticków do cytowania nazw.
Nie potrzebujesz SELECT DISTINCT
podczas korzystania z GROUP BY
.
Nie możesz odwoływać się do aliasu w SELECT
lista w tym samym zapytaniu, z wyjątkiem GROUP BY
, ORDER BY
i HAVING
.
Powinno być:
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