T-SQL : Greatest Function di SQL Server

Soeleman 17 Maret 2017

T-SQL : Greatest Function di SQL Server

Setiap database menyediakan fitur-fitur yang di rasa membantu menyederhanakan tugas. Seperti di MySql memiliki Greatest Function, yang membantu mencari nilai tertinggi dari sejumlah column. Tapi fungsi seperti ini tidak ada di SQL Server. Di tulisan ini kita akan mencoba melihat apakah ada caranya mensimulasi fungsi tersebut.

Table

Untuk mendemokan kita perlu sebuah table.

Kita buat table SeriesData, yang berisi Id, Seri1, Seri2 dan Seri3. Semua column itu bertype Int. Lalu di isikan dengan data seperti pada gambar.

Table SeriesData

Resultset

Dan untuk hasil dari demo ini akan seperti di bawah.

Greatest Resultset

MySQL

Dalam MySQL menggunakan Greatest Function sederhana sekali. Column dari table di masukkan kedalam fungsi itu sebagai parameter. Dan hasil-nya akan seperti yang di harapkan.

Greatest -- MySQL

SQL Server

Sedangkan SQL Server tidak memiliki fungsi seperti itu. Walaupun bisa saja kita buat User-Defined Function seperti itu. Dalam kesempatan ini kita akan membuat persamaan Greatest Function lewat T-SQL. Dan ternyata banyak juga caranya.

Values

Cara ini hanya bisa di lakukan pada SQL Server 2008 ke atas. Karena kita akan memanfaatkan Table Value Constructor di kombinasikan dengan fungsi MAX. Beberapa variasi bisa di lakukan di sini, untuk saat ini kita coba tunjukkan dengan sederhana agar bisa melihat lebih jelas.

Greatest by Values -- T-SQL

Column Sub-Query

Kita juga bisa memanfaatkan Union di Sub-Query seperti pada gambar di bawah. Dan seperti cara di atas, untuk mendapatkan nilai tertingginya kita memanfaatkan fungsi MAX

Greatest by Column Sub-Query -- T-SQL

Unpivot

Bisa juga kita lakukan dengan UNPIVOT. Sayangnya dengan ini kita akan terbatas oleh tata cara dari UNPIVOT sendiri. Terutama apabila kita perlu mengkombinasikan dengan sintak lainnya.

Greatest by Unpivot -- T-SQL

Union

Kalau di cara Sub-Query kita menggunakan Union. Maka di sini caranya sedikit berbeda, tapi hasil-nya sama.

Greatest by Union -- T-SQL

Cross-Join

Bisa juga kita manfaatkan Cross-Join untuk simulasi fungsi itu. Memang terlihat lebih banyak tapi ia memberikan ruang apabila di kombinasikan untuk tujuan lainnya.

Greatest by Cross-Join -- T-SQL

Penutup

Untuk mengsimulasikan Greatest Function di dalam SQL Server ternyata banyak pilihannya. Terlebih kalau kita mengkombinasikannya dengan User-Defined Function atau Stored-Procedure akan lebih banyak lagi variasinya.

Masih ada beberapa fungsi lainnya yang mirip dengan ini di MySql yang bisa kita simulasikan juga. Tentunya dengan modifikasi sedikit kita bisa capai seperti yang di maksud.

Referensi

Perhatian! Code yang di tampilkan 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 di ambil itu ke dalam production. Selain itu perlu ada tambahan code dan test sebelum siap untuk di gunakan secara utuh.