Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да направите SQL заявка с помощта на CASE

Има толкова много неща неправилни, че е трудно да се знае откъде да започне.

Смесвате двете форми на 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как автоматично да архивирам MySQL с MySQL workbench

  2. Ограничение за предотвратяване на вмъкването на празен низ в MySQL

  3. Задайте стойност AUTOINCREMENT в таблицата на django

  4. Как мога да дешифрирам хеш на парола в PHP?

  5. MySQL:как да предотвратим вмъкването на ред с всички колони =NULL?