Ada begitu banyak hal yang salah, sulit untuk mengetahui dari mana harus memulai.
Anda mencampuradukkan dua bentuk CASE
ekspresi. Salah satu bentuknya adalah:
CASE <expression>
WHEN <value> THEN <result>
WHEN <value> THEN <result>
...
END
yang lainnya adalah:
CASE
WHEN <condition> THEN <result>
WHEN <condition> THEN <result>
...
END
Anda mencoba menggunakan SELECT
kueri sebagai nilai, tetapi tidak ada FROM
klausa dan Anda harus membungkus kueri dalam tanda kurung untuk menggunakannya sebagai nilai. Saya menduga Anda ingin ini menanyakan dari tabel yang sama, dalam hal ini Anda tidak boleh melakukan subquery, Anda hanya harus menggunakan fungsi agregasi dalam kueri utama.
CASE
ekspresi harus menjadi bagian dari SELECT
daftar, bukan setelah FROM
klausa.
Jika Anda ingin membuat kolom terpisah dalam output untuk setiap kasus, kolom tersebut tidak boleh dalam satu CASE
ekspresi.
Anda memiliki semua nama tabel dan kolom dalam tanda kutip ganda, MySQL menggunakan backticks untuk mengutip nama.
Anda tidak perlu SELECT DISTINCT
saat menggunakan GROUP BY
.
Anda tidak dapat merujuk ke alias di SELECT
daftar dalam kueri yang sama, kecuali di GROUP BY
, ORDER BY
, dan HAVING
.
Seharusnya:
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