Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana melakukan permintaan SQL menggunakan CASE

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghindari string di pdo?

  2. Bagaimana cara mengubah cap waktu menjadi datetime di MySQL?

  3. menambahkan 30 menit ke datetime php/mysql

  4. Hitung saldo dengan mysql

  5. Membuat prosedur tersimpan di MySQL5 dengan <CFQUERY>-Tag Cold ColdFusion 9