SQL Server memiliki kemampuan unik yang memungkinkan Anda mengeksekusi logika program waktu nyata pada nilai dalam kueri Anda. Berdasarkan evaluasi logis tersebut, Anda dapat menghasilkan berbagai nilai sebagai bagian dari kumpulan data yang dikembalikan.
Menggunakan Pernyataan KASUS
Ini paling mudah dilakukan di semua versi SQL Server menggunakan CASE
pernyataan, yang bertindak sebagai logika IF...THEN...ELSE
ekspresi dan mengembalikan berbagai nilai tergantung pada hasilnya.
Dalam contoh di bawah ini, kami ingin mengembalikan locale
tambahan kolom yang menentukan apakah buku kita berlatar di Middle-earth atau regular Old Earth.
SELECT
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale,
books.*
FROM
books
Sebelum kita memeriksa CASE
khusus aspek pernyataan ini, mari kita hapus sementara CASE
untuk memperhatikan bahwa ini adalah SELECT
. yang sangat sederhana pernyataan di permukaan:
SELECT
books.*
FROM
books
Oleh karena itu, mari kita periksa bagaimana CASE
bagian terstruktur dan perilaku logis apa yang kami lakukan.
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale
Untuk memulai, kita menginisialisasi CASE
pernyataan kemudian tentukan dalam kondisi apa (WHEN
) CASE
kami pernyataan harus mengevaluasi hasil. Dalam contoh ini, kami memeriksa books.title
dan books.primary_author
; jika cocok dengan tema Tolkien-esque kami, THEN
kami mengembalikan nilai 'Middle-earth.' Jika tidak ada bidang yang cocok dengan pencarian kami, kami mengembalikan nilai 'Earth.'
Untuk mengatur ulang logika sebagai kode psuedo IF...THEN...ELSE
pernyataan, kami hanya meminta SQL untuk mengevaluasi:
IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
Terakhir, penting untuk diingat bahwa CASE
pernyataan harus selalu ditambahkan di akhir dengan END
. yang cocok penyataan. Pada contoh di atas, kami juga mengganti nama nilai yang dihasilkan yang dikembalikan ke locale
, meskipun itu tentu opsional.
Menggunakan Fungsi IIF
Jika Anda menggunakan versi SQL yang lebih modern, perlu diketahui bahwa SQL Server 2012 memperkenalkan IIF
yang sangat berguna. fungsi. IIF
adalah metode singkatan untuk melakukan IF...ELSE
/CASE
pernyataan dan mengembalikan salah satu dari dua nilai, tergantung pada evaluasi hasilnya.
Restrukturisasi contoh kami di atas untuk menggunakan IIF
cukup sederhana.
SELECT
IIF(
books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
'Middle-earth',
'Earth')
AS locale,
books.*
FROM
books
Dengan IIF
fungsi, kami sebagian besar mengganti banyak gula sintaksis dari CASE
pernyataan dengan beberapa pemisah koma sederhana untuk membedakan argumen kami.
Semua diberitahu, keduanya CASE
dan IIF
menyelesaikan pekerjaan yang sama, tetapi jika diberi pilihan, IIF
umumnya akan lebih mudah digunakan.