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

Gabungan setara untuk nilai ke-n bukan nol - MySQL

Saya tidak yakin apakah saya akan merekomendasikan menggunakan solusi ini... normalisasi data Anda selalu merupakan pilihan yang lebih baik, tetapi saya ingin menjawab menggunakan SQL biasa dengan beberapa fungsi string. Kueri ini akan mengembalikan apa yang Anda cari:

SELECT
  Name,
  Changes,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 1)), ',', 1)) as Change1,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 2)), ',', 1)) as Change2,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 3)), ',', 1)) as Change3,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 4)), ',', 1)) as Change4,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 5)), ',', 1)) as Change5,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 6)), ',', 1)) as Change6
FROM (
  SELECT
    Name,
    CONCAT_WS(',', CURRENT, OCT12, SEPT12, AUG12, JUL12, JUN12, MAY12, APR12, ',') as Changes
  FROM
    TableA
) s

Saya menggabungkan semua nilai dalam string yang dipisahkan koma, dengan dua koma di akhir string (satu koma akan cukup, tetapi lebih mudah untuk menempatkan dua dan mengabaikan yang terakhir ...), dan karena saya' m menggunakan CONCAT_WS itu akan secara otomatis melewati nilai nol, dan string yang dihasilkan akan menjadi seperti Aug-12,Jun-12,Apr-12,, .

Kemudian di kueri luar saya mengekstrak elemen ke-n dari string, menggunakan SUBSTRIG_INDEX. Saya akan merekomendasikan untuk menormalkan database Anda, tetapi jika Anda memerlukan perbaikan cepat, solusi ini mungkin merupakan titik awal yang baik.

Lihat itu berfungsi di sini .

Harap perhatikan bahwa saya tidak mengembalikan nilai NULL di mana tidak ada perubahan, tetapi saya mengembalikan string kosong sebagai gantinya. Ini dapat diubah jika Anda perlu.



  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 InnoDB - Bingung tentang transaksi

  2. php daftar data mysql dalam tabel html di kolom dan baris

  3. Cara mengembalikan array saat menggunakan GROUP BY

  4. Terjadi kesalahan fatal selama eksekusi perintah dengan mySQL INSERT

  5. 2 Cara Mengkonversi antara Desimal dan Heksadesimal di MySQL