Terkadang, Anda mungkin perlu mengubah urutan baris menjadi kolom atau membuat tabel pivot untuk tujuan pelaporan. Karena tidak ada fungsi bawaan untuk mencapai pivot di MySQL, Anda perlu melakukannya melalui kueri SQL untuk membuat tabel laporan pivot. Mari kita lihat bagaimana menampilkan nilai baris sebagai kolom di MySQL.
Cara Menampilkan Nilai Baris sebagai Kolom di MySQL
Katakanlah Anda memiliki tabel berikut.
CREATE TABLE Meeting ( ID INT, Meeting_id INT, field_key VARCHAR(100), field_value VARCHAR(100) ); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (1, 1,'first_name' , 'Alec'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (2, 1,'last_name' , 'Jones'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (3, 1,'occupation' , 'engineer'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (4,2,'first_name' , 'John'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (5,2,'last_name' , 'Doe'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (6,2,'occupation' , 'engineer'); +------+------------+------------+-------------+ | ID | Meeting_id | field_key | field_value | +------+------------+------------+-------------+ | 1 | 1 | first_name | Alec | | 2 | 1 | last_name | Jones | | 3 | 1 | occupation | engineer | | 4 | 2 | first_name | John | | 5 | 2 | last_name | Doe | | 6 | 2 | occupation | engineer | +------+------------+------------+-------------+
Katakanlah Anda ingin mentranspos baris ke kolom secara dinamis, sehingga kolom baru dibuat untuk setiap nilai unik di field_key kolom, yaitu (nama_depan, nama_belakang, pekerjaan)
+------------+-------------+-------------+-------------+ | Meeting_id | first_name | last_name | occupation | +------------+-------------+-------------+-------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+-------------+-------------+-------------+
Menampilkan Nilai Baris sebagai Kolom di MySQL
Jika Anda sudah mengetahui kolom mana yang ingin Anda buat, Anda dapat membuat tabel pivot menggunakan pernyataan CASE, seperti yang ditunjukkan di bawah ini, untuk menampilkan nilai baris sebagai kolom di MySQL.
mysql> select meeting_Id, max(case when (field_key='first_name') then field_value else NULL end) as 'first_name', max(case when (field_key='last_name') then field_value else NULL end) as 'last_name', max(case when (field_key='occupation') then field_value else NULL end) as 'occupation' from meeting group by meeting_Id order by meeting_Id; +------------+------------+-----------+------------+ | meeting_Id | first_name | last_name | occupation | +------------+------------+-----------+------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+------------+-----------+------------+
Menampilkan Nilai Baris sebagai Kolom di MySQL Secara Dinamis
Jika Anda tidak mengetahui nama kolom sebelumnya, atau ingin menampilkan nilai baris sebagai kolom di MySQL secara dinamis, Anda dapat membuat tabel pivot dinamis di MySQL menggunakan fungsi GROUP_CONCAT, seperti yang ditunjukkan di bawah ini.
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when field_key = ''', field_key, ''' then field_value end) ', field_key ) ) INTO @sql FROM Meeting; SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' FROM Meeting GROUP BY Meeting_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
GROUP_CONCAT memungkinkan Anda untuk menggabungkan nilai field_key dari beberapa baris menjadi satu string. Dalam kueri di atas, kami menggunakan GROUP_CONCAT untuk membuat pernyataan CASE secara dinamis, berdasarkan nilai unik di field_key kolom dan simpan string itu dalam variabel @sql, yang kemudian digunakan untuk membuat kueri pemilihan.
+------------+------------+-----------+------------+ | Meeting_id | first_name | last_name | occupation | +------------+------------+-----------+------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+------------+-----------+------------+
Anda dapat menyesuaikan kueri di atas sesuai kebutuhan Anda dengan menambahkan klausa WHERE atau GABUNG.
Jika Anda ingin mengubah urutan hanya memilih nilai baris sebagai kolom, Anda dapat menambahkan klausa WHERE dalam pernyataan GROUP_CONCAT pilihan pertama Anda.
SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when field_key = ''', field_key, ''' then field_value end) ', field_key ) ) INTO @sql FROM Meeting WHERE <condition>;
Jika Anda ingin memfilter baris dalam tabel pivot akhir, Anda dapat menambahkan klausa WHERE dalam pernyataan SET.
SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' FROM Meeting WHERE <condition> GROUP BY Meeting_id');
Demikian pula, Anda juga dapat menerapkan GABUNG dalam kueri SQL saat Anda menampilkan nilai baris sebagai kolom di MySQL.
Setelah Anda mengonversi baris ke kolom di MySQL, Anda dapat menggunakan alat bagan untuk memplot hasilnya dalam sebuah tabel. Berikut adalah contoh tabel pivot yang dibuat menggunakan Ubiq.
Jika Anda ingin membuat tabel pivot, grafik &dasbor dari database MySQL, Anda dapat mencoba Ubiq. Kami menawarkan uji coba gratis selama 14 hari.