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

Cara Menampilkan Nilai Baris sebagai Kolom di MySQL

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.

  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 cepat mengganti nama database MySQL (mengubah nama skema)?

  2. Tidak ada pemetaan Dialek untuk tipe JDBC:1111

  3. Menginstal MySQL-python

  4. Cara Menghitung Perbedaan Antara Dua Timestamp di MySQL

  5. Kolom tidak dikenal dalam kesalahan 'daftar bidang' pada permintaan Pembaruan MySQL