Bagaimana cara melakukan IF...THEN
dalam sebuah SQL SELECT
pernyataan?
Sebagai contoh:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
sql
sql-server
tsql
if-statement
case
Eric Labashosky
sumber
sumber
WHERE
danCHECK
tetapi tidakSELECT
.Jawaban:
The
CASE
pernyataan adalah yang paling dekat dengan IF di SQL dan didukung pada semua versi SQL Server.Anda hanya perlu melakukan
CAST
jika Anda menginginkan hasilnya sebagai nilai Boolean. Jika Anda senang denganint
, ini berfungsi:CASE
pernyataan dapat disematkan dalamCASE
pernyataan lain dan bahkan dimasukkan dalam agregat.SQL Server Denali (SQL Server 2012) menambahkan pernyataan IIF yang juga tersedia dalam akses (ditunjukkan oleh Martin Smith ):
sumber
Pernyataan kasus adalah teman Anda dalam situasi ini, dan mengambil salah satu dari dua bentuk:
Kasus sederhana:
Kasus diperpanjang:
Anda bahkan dapat memasukkan pernyataan kasus dalam urutan dengan klausa untuk pemesanan yang benar-benar mewah.
sumber
AS Col_Name
setelahEND
untuk memberi nama kolom yang dihasilkanDari SQL Server 2012 Anda dapat menggunakan
IIF
fungsi untuk ini.Ini secara efektif hanya cara penulisan (walaupun bukan SQL standar) penulisan
CASE
.Saya lebih suka keringkasan jika dibandingkan dengan
CASE
versi yang diperluas .Keduanya
IIF()
danCASE
diselesaikan sebagai ekspresi dalam pernyataan SQL dan hanya dapat digunakan di tempat yang didefinisikan dengan baik.Jika kebutuhan Anda tidak dapat dipenuhi oleh batasan-batasan ini (misalnya, kebutuhan untuk mengembalikan set hasil yang berbeda tergantung pada beberapa kondisi) maka SQL Server juga memiliki
IF
kata kunci prosedural .Namun terkadang harus diperhatikan untuk menghindari masalah parameter sniffing dengan pendekatan ini .
sumber
Anda dapat menemukan beberapa contoh yang bagus dalam Kekuatan Pernyataan KASUS SQL , dan saya pikir pernyataan yang dapat Anda gunakan akan menjadi sesuatu seperti ini (dari 4guysfromrolla ):
sumber
Gunakan KASUS. Sesuatu seperti ini.
sumber
sumber
Microsoft SQL Server (T-SQL)
Dalam
select
, gunakan:Dalam sebuah
where
klausa, gunakan:sumber
where Obsolete = 'N' or InStock = 'Y'
dan memotong di mana setengah praktisDari tautan ini , kita dapat memahami
IF THEN ELSE
dalam T-SQL:Bukankah ini cukup baik untuk T-SQL?
sumber
sumber
Pernyataan if-else sederhana di SQL Server:
Pernyataan bersarang jika ... di SQL Server -
sumber
SELECT
seperti yang diminta OP?Fitur baru, IIF (yang bisa kita gunakan), ditambahkan di SQL Server 2012:
sumber
Gunakan pernyataan KASUS:
sumber
Gunakan logika bit murni:
Lihat demo yang berfungsi: jika kemudian tanpa
case
di SQL Server .Untuk memulai, Anda perlu menghitung nilai
true
danfalse
untuk kondisi yang dipilih. Inilah dua NULLIF :dikombinasikan bersama memberikan 1 atau 0. Selanjutnya gunakan operator bitwise .
Ini adalah metode yang paling WYSIWYG .
sumber
sumber
sumber
sumber
Ini bukan jawaban, hanya contoh pernyataan KASUS yang digunakan tempat saya bekerja. Ini memiliki pernyataan KASUS bersarang. Sekarang Anda tahu mengapa mata saya juling.
sumber
CASE
menjadi terangkat dan ditandai sebagai jawaban alih-alihIF
yang seharusnya menjadi jawaban, seperti ini, ini masih merupakanCASE
pernyataan, bukan sebuahIF
.Jika Anda memasukkan hasil ke dalam tabel untuk pertama kalinya, alih-alih mentransfer hasil dari satu tabel ke tabel lainnya, ini berfungsi di Oracle 11.2g:
sumber
Sebagai solusi alternatif untuk
CASE
pernyataan tersebut, pendekatan berbasis tabel dapat digunakan:Hasil:
sumber
sumber
Bagi mereka yang menggunakan SQL Server 2012, IIF adalah fitur yang telah ditambahkan dan berfungsi sebagai alternatif untuk pernyataan Kasus.
sumber
sumber
Anda dapat memiliki dua pilihan untuk menerapkan ini:
Menggunakan IIF, yang diperkenalkan dari SQL Server 2012:
Menggunakan
Select Case
:sumber
Pertanyaan:
ANSI:
Menggunakan alias -
p
dalam hal ini - akan membantu mencegah masalah.sumber
Menggunakan SQL CASE sama seperti pernyataan If / Else biasa. Dalam kueri di bawah ini, Jika nilai usang = 'N' atau Jika nilai InStock = 'Y' maka Output akan menjadi 1. Jika tidak, output akan menjadi 0. Kemudian kita menempatkan nilai 0 atau 1 di bawah kolom Salable.
sumber
If..Then...Else..
Pernyataan penggunaan dalamSQL
sebagai berikut ....sumber
Ini akan menjadi sesuatu seperti itu:
sumber
SELECT OrderID, Quantity, CASE WHEN Quantity > 30 THEN "The quantity is greater than 30" WHEN Quantity = 30 THEN "The quantity is 30" ELSE "The quantity is under 30" END AS QuantityText FROM OrderDetails WHERE QuantityText = 'The quantity is 30';
Demi kelengkapan, saya akan menambahkan bahwa SQL menggunakan logika bernilai tiga. Ekspresi:
Dapat menghasilkan tiga hasil berbeda:
Jadi misalnya jika suatu produk sudah usang tetapi Anda tidak tahu apakah produk tersebut tidak berharga maka Anda tidak tahu apakah produk itu dapat dijual. Anda dapat menulis logika tiga nilai ini sebagai berikut:
Setelah Anda mengetahui cara kerjanya, Anda bisa mengonversi tiga hasil menjadi dua hasil dengan memutuskan perilaku nol. Misalnya ini akan memperlakukan null sebagai tidak terjual:
sumber
Saya suka menggunakan pernyataan KASUS tetapi pertanyaannya meminta pernyataan IF di Pilih SQL. Apa yang saya gunakan di masa lalu adalah:
Ini seperti pernyataan excel atau sheet IF di mana ada kondisi yang diikuti oleh kondisi sebenarnya dan kemudian kondisi salah:
Selain itu, Anda dapat membuat pernyataan if (tetapi kemudian gunakan harus menggunakan KASUS :-)
(Catatan: ini berfungsi di MySQLWorkbench tetapi mungkin tidak berfungsi di platform lain)
sumber
Anda dapat menggunakan Pernyataan Kasus:
sumber