0
0
0
share
#database#database#Microsoft#Microsoft
0 Komentar
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.
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.
Travel Dates
Selanjutnya kita perlu memetakan data yang ada di-column TravelBegin dan TravelEnd. Dengan bantuan resultset diatas, kita akan mendapatkan hasil seperti dibawah.
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).
Merge Dates
Sekarang kedua resultset tersebut kita gabung untuk mendapatkan tanggal dimana Name-nya masuk dalam urutan.
Pivot
Setelah ini lebih mudah, kita tinggal menghorisontalkan data tersebut dengan Pivot.
T-SQL
Potongan-potongan SQL yang ada kita gabungkan, maka akan terlihat seperti dibawah.
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
0
0
0
share