Penggunaan Perintah CASE Dalam SQL
Perintah CASE sering digunakan untuk menampilkan nilai tertentu dari beberapa barisan data dengan syarat-syarat atau kondisi yang kita berikan.
Kalau kita belajar bahasa pemrograman tentu kita kenal dengan perintah IF Condition, fungsinya CASE hampir sama. Bedanya perintah CASE digunakan untuk beberapa kondisi sekaligus, dan didalam SQL perintah CASE tidak bisa berdiri sendiri melainkan harus disisipkan dalam perintah SELECT. Jadi berbeda dengan perintah IF yang lebih bebas, akan tetapi perintah IF hanya berguna apabila dimasukan dalam STORE PROCEDURE, FUNCTION dan TRIGGER. Perbedaannya dalam SQL sangat jelas sekali, karena perintah CASE disisipkan dalam perintah SELECT jadi yang dihasilkan langsung berupa DATASET dan langsung bisa dilihat hasilnya.
Perintah CASE ini mempunyai dua format :
1. Simple Case function :
Maksudnya adalah perintah CASE sederhana.
Bentuk Sintaknya
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END
2. Searched CASE function:
Maksudnya perintah CASE ini diikuti dengan syarat kondisi boolean, seperti >, <, >=, <= , dan lain-lain.
Sintaknya sebagai berikut.
CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END
Saya akan memberikan contoh dari kedua jenis CASE tersebut agar dapat bisa membedakan, kapan saat kita memakai Simple Case dan kapan saat kita memakai Search Case.
Terlebih dahulu saya akan memberi contoh Simple Case,
Misalnya kita mempunyai lima kategori penilaian terhadap nilai ujian Mahasiswa.
A = Sangat Baik, B = ‘Baik’, C = ‘Cukup’, D = ‘Jelek’, E = ‘Sangat Jelek’
Dibawah ini ada tabel dasar berupa nilai ujian dari sejumlah Mahasiswa, kita namakan saja tb_nilai
| No_induk | Nilai |
|---|---|
| M1001 | A |
| M1002 | B |
| M1003 | D |
| M1004 | E |
| M1005 | A |
| M1006 | C |
| M1007 | B |
| M1008 | E |
| M1009 | A |
| M1010 | D |
Dari data tersebut kita ingin mengkonversikan nilai-nilai tersebut dengan memakai perintah CASE sehingga menghasilkan barisan data dibawah ini.
| No_induk | Nilai | Keterangan |
|---|---|---|
| M1001 | A | Sangat Baik |
| M1002 | B | Baik |
| M1003 | D | Jelek |
| M1004 | E | Sangat Jelek |
| M1005 | A | Sangat Baik |
| M1006 | C | Cukup |
| M1007 | B | Baik |
| M1008 | E | Sangat Jelek |
| M1009 | A | Sangat Baik |
| M1010 | D | Jelek |
Untuk menghasilkan data diatas kita menggunakan skrip SQL sebagai berikut :
| SELECT no_induk, nilai, keterangan = CASE nilai WHEN ‘A’ THEN ‘Sangat Baik’ WHEN ‘B’ THEN ‘Baik’ WHEN ‘C’ THEN ‘Cukup’ WHEN ‘D’ THEN ‘Jelek’ ELSE ‘Sangat Jelek’ END FROM tb_nilai |
Dari skrip SQL tersebut terlihat kita membentuk kolom keterangan yang mana isinya sesuai dengan kondisi CASE.
Berikutnya saya akan memberi contoh Search Case,
Anggaplah kita mempunyai kategori nilai
nilai > 8,5 dapat kategori ‘A’,
nilai >6,5 dan <=8,5 kategori ‘B’
nilai > 5,5 dan <= 6,5 kategori ‘C’
nilai >4,5 dan <= 5,5 kategori ‘D’
Nilai <= 4,5 kategori E.
Dan kita mempunyai tabel kita beri nama saja daftar_nilai dengan isi sebagai berikut
| No_induk | Nilai |
|---|---|
| M1001 | 9 |
| M1002 | 8 |
| M1003 | 6 |
| M1004 | 4.5 |
| M1005 | 3 |
| M1006 | 5.5 |
| M1007 | 8 |
| M1008 | 7 |
| M1009 | 6 |
| M1010 | 6.5 |
Dan kita ingin menghasilkan suatu dataset yang bentuk tampilannya sebagai berikut :
| No_induk | Nilai | Kategori |
|---|---|---|
| M1001 | 9 | A |
| M1002 | 8 | C |
| M1003 | 6 | B |
| M1004 | 4.5 | E |
| M1005 | 3 | E |
| M1006 | 5.5 | D |
| M1007 | 8 | B |
| M1008 | 7 | B |
| M1009 | 6 | C |
| M1010 | 6.5 | C |
Maka Skrip yang akan harus ditulis sebagai berikut :
| SELECT no_induk, nilai, kategori = CASE WHEN nilai > 8.5 THEN ‘A’ WHEN nilai > 6.5 THEN ‘B’ WHEN nilai > 5.5 THEN ‘C’ WHEN nilai > 4.5 THEN ‘D’ ELSE ‘E’ END FROM daftar_nilai |
Kedua contoh diatas merupakan contoh-contoh sederhana dan apabila sudah dipahami dapat dikembangkan lebih lanjut sesuai dengan kebutuhan situasi.
Mudah-mudahan dapat bermanfaat bagi yang suka bermain-main dengan SQL.
Selamat mencoba dan semoga Anda beruntung.
Artikel lainnya
- Dasar-Dasar SQL 1
- Dasar-Dasar SQL 2
- Dasar-Dasar SQL 3
- Dasar-Dasar SQL 4
- Konsep Himpunan Dalam SQL
- Instalasi MySQL
- Koneksi Delphi ke SQL Server
- Full Join dan Cross Join dalam SQL
- Query Dalam Query
- Perintah EXISTS dalam SQL
- Perbedaan Perintah UNION dan UNION ALL dalam SQL
- Cara Membuat Store Procedure di SQL Server
- Perintah LIKE dalam SQL
- Create Trigger dalam SQL
- Penggunaan Perintah CASE Dalam SQL
- INSERT…… Perintah Lanjutan SQL
- update-from
- Delete….From…




saya sudah coba penggungaan perintah case dalam sql namun tidak jalan, contoh nilai saya ganti dengan skor, skor hasil dari nilai rata-rata avg(NilSis.nilai) as skor, bisa dibantu
skrip saya seperti ini
with query1 do begin
close;
sql.clear;
sql.add(‘Select NilSis.Nosis,avg(Nilsis.Nilai)as skor,Predikat =
case
when Skor >90 then ‘Sangat Memuaskan’
when skor >80 then ‘Memuaskan’
when skor >70 then ‘Cukup Memuaskan’
else ‘Kurang Memuaskan’
end
form NilSis
mudah2an skrip diatas bisa membantu.
saya sudah coba source diatas tapi belum bisa muncul keterangan
Invalid use of keyword
Token:=
case
when
Line Number: 1
saya pake delphi 7 database paradox
bisa kasih alternatif lain / fungsi lain untuk hasil yang sama, databasenya tetap database paradox,
please……
terima kasih saya sudah coba alternatif menggunakan static sql dan berhasil, kalau diijinkan saya mau tanya lagi pada tabel yang sama untuk nilai skor khan hasil dari avg(NilSis.Nilai) as Skor saat ditampilkan kedalam grid hasilnya angka dibalakang koma banyak sekali misal 85,3333333333333.. saya mau membatasi hanya dua angka dibelakang koma misal 85,33
terima kasih saya sudah coba dan berhasil, saya masih ada pertanyaan lagi untuk nilai hasil AVG(Nilsis.Nilai) as skor angka dibelakan koma terlalu banyak saya mau jadikan 2 angka dibelakang koma misalnya 85,3333333… menjadi 85,33 gimana caranya, makasih sebelumnya
terima kasih saya sudah coba dan berhasil, kalo masih ada kesulitan lagi masih bisa bertanya nggak ?
gini mas saya punya tabel tampilan di DBGrid secara umum seperti dibawah ini:
Mata_Kuliah Nilai
Word A
Excel B
P.Point B
Access C
Bisa gak posisinya diubah menjadi seperti dibawah ini :
Mata_Kuliah Word Excel P.Point Access
Nilai A B B C
terima kasih sebelumnya..
saya pake program delphi 7 database paradox