Membuat Pivot dari Banyak Table

Soeleman 14 Februari 2017

Membuat Pivot dari Banyak Table

Permintaan data dari user, kadang tidak umum dan mungkin lebih terlihat seperti excel saja. Seperti permintaan menggabungkan table dalam bentuk column.

Terlihat sederhana bagi user tapi bagi developer pilihannya dilakukan di kode atau langsung didalam database. Karena ini tulisan tentang database, maka tentu kita coba tawarkan solusi lewat query.

Table

Kita siapakan tiga table. Dengan TableA sebagai table utamanya.

TableA

Di sini kita buat dua data yang akan bertindak sebagai filter.

alt text

TableB

Ini dibuat dengan data yang sama antara Id 1 dan 2.

alt text

TableC

Untuk table ini baru kita buat perbedaan jumlah data antara Id 1 dan 2.

alt text

Target

Kalau kita hanya menginginkan semua data yang berhubungan dengan Id 1. Kita akan melihat data seperti dibawah.

alt text

Dengan nilai Id yang berbeda, akan terlihat seperti dibawah.

alt text

Dan apabila dilakukan tanpa Where, maka kita akan melihat tumpukan data per-table pada column yang tersedia.

alt text

MySQL

Pertama yang kita lakukan adalah mengabungkan tiga table tersebut dengan UNION. Dalam tindakkan itu juga kita beri penanda per-table-nya, lihat column Tab.

Dari situ kita tambahkan nomor urut sesuai dengan Tab-nya lewat variable. Dengan begitu kita memiliki partisi antar table yang sudah tergabung.

Setelah itu resultset itu kita pecah menjadi column atau biasa di sebut pivot. Bersama itu pula kita GROUP BY-kan berdasarkan nomor-urut yang kita buat tadi. Dengan begitu tujuan membentuk target kita bisa tercapai.

Dalam query di bawah kita juga menambahkan filter dalam bentuk Where. Kita gunakan variable @s, karena itu digunakan pada ketiga table. Tentu kalau ingin mendapatkan hasil dari semua yang ada di-TableA, kita bisa tidak gunakan variable tersebut.

< MySql >
alt text

SQL Server

Data flow-nya hampir sama dengan yang MySQL. Bedanya di sini lebih sederhana, karena kita memanfaatkan ROW_NUMBER.

< T-SQL >
alt text

Penutup

Sesuai dengan permintaan dari user-nya, kita di sini mengabungkan tiga table ke dalam pivot. Dengan memberikan nomor-urut pada saat UNION, akan memberikan kita keleluasaan melakukan urutan pada hasil dari query ini.

Referensi

Perhatian! Code yang ditampilkan dalam tulisan ini merupakan ilustrasi dari yang ingin dipaparkan dan bukan production ready code.
Sudah banyak kejadian karena asal meng-copy-and-paste tanpa mengerti code yang diambil itu ke dalam production.
Selain itu perlu ada tambahan code dan test sebelum siap untuk digunakan secara utuh.