Pemrograman, Teknologi

Mengubah Baris Menjadi Kolom Pada Query SQL : Kasus Konfigurasi Email

Posted by Andika Saputra on 25 November 2018

Pada tulisan sebelumnya, saya pernah membahas tentang bagaimana cara merubah baris menjadi kolom pada query sql untuk mendapatkan nilai total data dari sebuah soal yang dapat di akses di alamat berikut ini. Nah kali ini kita akan bahas hal yang hampir mirip, tetapi menggunakan query yang agak berbeda, dan tentu saja dengan tujuan berbeda. Apabila kita menggunakan cara sebelumnya, kita hanya bisa mendapat nilai dari jumlah / total data. Tetapi, dengan cara ini, kita akan mengambil nilai / value / isi dari sebuah field berdasarkan field di sampingnya.

Oke, langsung saja ke inti.

Di sini kita punya sebuah tabel yang digunakan untuk menyimpan segala jenis konfigurasi / preferences dari sebuah website. Dan struktur / deskripsi dari tabel tersebut adalah sebagai berikut.

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| pref_id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| pref_group | varchar(50)  | NO   |     | NULL    |                |
| pref_name  | varchar(50)  | NO   |     | NULL    |                |
| pref_value | varchar(150) | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

Dan dari struktur tabel yang seperti di atas, kita memiliki beberapa data konfigurasi / preferences website / sistem seperti di bawah ini.

+---------+------------+-------------+-----------------------------------------+
| pref_id | pref_group | pref_name   | pref_value                              |
+---------+------------+-------------+-----------------------------------------+
|       1 | email      | smtp_host   | mail.google.com                         |
|       2 | email      | smtp_user   | example@gmail.com                       |
|       3 | email      | smtp_pass   | example                                 |
|       4 | email      | smtp_port   | 465                                     |
|       5 | site       | title       | This is just a website                  |
|       6 | site       | description | This is just a description of a website |
+---------+------------+-------------+-----------------------------------------+

Nah dari beberapa item data preferences tersebut, kita bisa melihat bahwa  kita memiliki dua group / jenis konfigurasi, yaitu email dan site. Di tulisan kali ini, kita akan mengubah beberapa baris data tersebut menjadi kolom seperti pada tulisan saya sebelumnya. Namun di sini yang dijadikan nama kolom adalah value dari field pref_name, dan yang akan dijadikan datanya adalah dari field pref_value. Di sini terlihat bahwa yang akan dijadikan data / value adalah nilai sebenarnya, bukan berupa hasil penjumlahan / SUM.

Berikut adalah query yang bisa digunakan untuk mendapatkan hasil seperti yang diharapkan.

SELECT
MAX(CASE WHEN (pref_name = 'smtp_host') THEN pref_value ELSE NULL END) AS smtp_host,
MAX(CASE WHEN (pref_name = 'smtp_port') THEN pref_value ELSE NULL END) AS smtp_port,
MAX(CASE WHEN (pref_name = 'smtp_user') THEN pref_value ELSE NULL END) AS smtp_user,
MAX(CASE WHEN (pref_name = 'smtp_pass') THEN pref_value ELSE NULL END) AS smtp_pass
FROM preferences
WHERE pref_group = 'email';

view raw
preferences.sql
hosted with ❤ by GitHub

Dan kemudian akan menghasilkan tabel result yang seperti di bawah ini.

+-----------------+-----------+-------------------+-----------+
| smtp_host       | smtp_port | smtp_user         | smtp_pass |
+-----------------+-----------+-------------------+-----------+
| mail.google.com | 465       | example@gmail.com | example   |
+-----------------+-----------+-------------------+-----------+

Demikianlah tulisan saya mengenai cara mengubah baris menjadi kolom pada query mysql yang menggunakan studi kasus Konfigurasi Email dengan menggunakan tabel preferences. Cara ini juga bisa digunakan untuk mengambil preferences dari data situs (pref_group = 'site') dengan menyesuaikan data dan nama pref_name nya.

Baca Juga:  Belajar Pemrograman : Fungsi
Tags : , , , , ,