Có quá nhiều thứ sai, thật khó để biết bắt đầu từ đâu.
Bạn đang trộn hai dạng CASE
biểu hiện. Một dạng là:
CASE <expression>
WHEN <value> THEN <result>
WHEN <value> THEN <result>
...
END
còn lại là:
CASE
WHEN <condition> THEN <result>
WHEN <condition> THEN <result>
...
END
Bạn đang cố sử dụng SELECT
truy vấn dưới dạng một giá trị, nhưng nó thiếu FROM
và bạn phải đặt một truy vấn trong dấu ngoặc đơn để sử dụng nó như một giá trị. Tôi nghi ngờ bạn muốn điều này được truy vấn từ cùng một bảng, trong trường hợp đó bạn không nên thực hiện truy vấn phụ, bạn chỉ nên sử dụng hàm tổng hợp trong truy vấn chính.
CASE
biểu thức phải là một phần của SELECT
danh sách, không phải sau FROM
mệnh đề.
Nếu bạn muốn tạo các cột riêng biệt trong đầu ra cho từng trường hợp, chúng không thể nằm trong một CASE
biểu thức.
Bạn có tất cả tên bảng và cột của mình trong dấu ngoặc kép, MySQL sử dụng dấu ngoặc kép để trích dẫn tên.
Bạn không cần SELECT DISTINCT
khi sử dụng GROUP BY
.
Bạn không thể tham chiếu đến bí danh trong SELECT
danh sách trong cùng một truy vấn, ngoại trừ trong GROUP BY
, ORDER BY
và HAVING
.
Nó phải là:
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