Pivot Range-Date Column

Soeleman 25 Juni 2018

Pivot Range-Date Column

Merencanakan column pada sebuah table bukan pekerjaan yang mudah, terutama kalau kita berfikir kita hanya butuh table sederhana.

Seiring waktu, pengguna memiliki kebutuhan yang berbeda. Dan perencanaan yang sudah ada akan menjadi batu sandungan tersendiri dalam memenuhi kebutuhan tersebut.

Table

Contohnya kita ada tabel yang berisi column TravelBegin dan TravelEnd. Perancangnya berfikir dengan struktur seperti ini cukup mengkomodasi kebutuhan yang ada.

Ternyata ada kebutuhan dari pengguna untuk melihat data itu secara horisontal. Seperti yang terlihat pada resultset kedua.

alt text

Seq Dates

Yang pertama kita butuhkan adalah rentang data. Dalam artian kita perlu membatasi tanggal terrendah dan tertinggi dari percariannya.

Disini kita gunakan urutan angka yang kita dapatkan dari [sys].[all_objects], disini kita limit satu tahun saja(365 hari). Dengan adanya urutan angka ini, kita bisa membuat urutan tanggal.

alt text

Travel Dates

Selanjutnya kita perlu memetakan data yang ada di-column TravelBegin dan TravelEnd. Dengan bantuan resultset diatas, kita akan mendapatkan hasil seperti dibawah.

alt text

Range Dates

Kita juga memanfaatkan urutan tanggal diatas, untuk medapatkan resultset per-column Name. Karena urutan tanggal adalah 10 hari, maka per-Name akan dibuatkan duplikasinya. Jumlah row yang dibuat menjadi 30, sesuai jumlah Name yang ada (3 nama).

alt text

Merge Dates

Sekarang kedua resultset tersebut kita gabung untuk mendapatkan tanggal dimana Name-nya masuk dalam urutan.

alt text

Pivot

Setelah ini lebih mudah, kita tinggal menghorisontalkan data tersebut dengan Pivot.

alt text

T-SQL

Potongan-potongan SQL yang ada kita gabungkan, maka akan terlihat seperti dibawah.

alt text

Penutup

Untuk menyelesaikan transformasi data menjadi horisontal seperti yang diinginkan, kita memerlukan urutan tanggal dan gabungan resultset dari proses tersebut.

Yang perlu diingat ketika merancang sebuah table, adalah lebih mudah kedepannya apabila data yang disimpan berbentuk row dibandingkan column terutama bila kita akan menggunakan data tersebut untuk tujuan lain.

Referensi