Има толкова много неща неправилни, че е трудно да се знае откъде да започне.
Смесвате двете форми на CASE
изразяване. Една форма е:
CASE <expression>
WHEN <value> THEN <result>
WHEN <value> THEN <result>
...
END
другият е:
CASE
WHEN <condition> THEN <result>
WHEN <condition> THEN <result>
...
END
Опитвате се да използвате SELECT
заявка като стойност, но в нея липсва FROM
клауза и трябва да увиете заявка в скоби, за да я използвате като стойност. Подозирам, че сте искали това да е заявка от същата таблица, в който случай не трябва да правите подзаявка, просто трябва да използвате функцията за агрегиране в основната заявка.
CASE
изразът трябва да бъде част от SELECT
списък, а не след FROM
клауза.
Ако искате да създадете отделни колони в изхода за всеки случай, те не могат да бъдат в един CASE
израз.
Имате всичките си имена на таблици и колони в двойни кавички, MySQL използва обратни отметки, за да цитира имената.
Нямате нужда от SELECT DISTINCT
когато използвате GROUP BY
.
Не можете да препращате към псевдоним в SELECT
списък в същата заявка, освен в GROUP BY
, ORDER BY
и HAVING
.
Трябва да бъде:
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