The OR
operator di WHEN
klausa dari CASE
pernyataan tidak didukung. Bagaimana saya bisa melakukan ini?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
The OR
operator di WHEN
klausa dari CASE
pernyataan tidak didukung. Bagaimana saya bisa melakukan ini?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Jawaban:
Format itu mengharuskan Anda untuk menggunakan:
CASE ebv.db_no
WHEN 22978 THEN 'WECS 9500'
WHEN 23218 THEN 'WECS 9500'
WHEN 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Jika tidak, gunakan:
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
=
akan bekerja jika Anda membandingkan dengan nilai tunggal. Namun, (22978, 23218, 23219)
adalah array dan IN
diperlukan untuk mencocokkan hanya satu dari nilai-nilai.
CASE
WHEN ebv.db_no = 22978 OR
ebv.db_no = 23218 OR
ebv.db_no = 23219
THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
IN
kata kunci jauh lebih baik
Anda dapat menggunakan salah satu ekspresi yang dimiliki WHEN, tetapi Anda tidak dapat mencampur keduanya.
WHEN when_expression
Merupakan ekspresi sederhana yang dibandingkan dengan input_expression saat format KASUS sederhana digunakan. when_expression adalah ekspresi yang valid. Jenis data input_expression dan masing-masing when_expression harus sama atau harus konversi implisit.
KAPAN Boolean_expression
Apakah ekspresi Boolean dievaluasi saat menggunakan format KASUS yang dicari. Boolean_expression adalah ekspresi Boolean yang valid.
Anda dapat memprogram:
1.
CASE ProductLine
WHEN 'R' THEN 'Road'
WHEN 'M' THEN 'Mountain'
WHEN 'T' THEN 'Touring'
WHEN 'S' THEN 'Other sale items'
ELSE 'Not for sale'
2.
CASE
WHEN ListPrice = 0 THEN 'Mfg item - not for resale'
WHEN ListPrice < 50 THEN 'Under $50'
WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
ELSE 'Over $1000'
END
Tetapi bagaimanapun Anda dapat mengharapkan bahwa peringkat variabel akan dibandingkan dalam ekspresi boolean.
Lihat KASUS (Transact-SQL) (MSDN).
Sudah ada banyak jawaban sehubungan dengan CASE
. Saya akan menjelaskan kapan dan bagaimana cara menggunakannya CASE
.
Anda bisa menggunakan ekspresi KASUS di mana saja di kueri SQL. Ekspresi KASUS dapat digunakan dalam pernyataan SELECT, WHERE clauses, Order by clause, HAVING clauses, Insert, UPDATE, dan DELETE.
Ekspresi CASE memiliki dua format berikut:
Ekspresi KASUS sederhana
CASE expression
WHEN expression1 THEN Result1
WHEN expression2 THEN Result2
ELSE ResultN
END
Ini membandingkan ekspresi dengan serangkaian ekspresi sederhana untuk menemukan hasilnya. Ekspresi ini membandingkan ekspresi dengan ekspresi dalam setiap klausa KAPAN untuk ekivalensi. Jika ekspresi dalam klausa KETIKA cocok, ekspresi dalam klausa KEMUDIAN akan dikembalikan.
Di sinilah pertanyaan OP jatuh. 22978 OR 23218 OR 23219
tidak akan mendapatkan nilai yang sama dengan ekspresi yaitu ebv.db_no. Itu sebabnya memberikan kesalahan. Jenis data input_expression dan masing-masing when_expression harus sama atau harus konversi implisit.
Ekspresi KASUS yang dicari
CASE
WHEN Boolean_expression1 THEN Result1
WHEN Boolean_expression2 THEN Result2
ELSE ResultN
END
Ekspresi ini mengevaluasi sekumpulan ekspresi boolean untuk menemukan hasilnya. Ekspresi ini memungkinkan operator pembanding, dan operator logika AND / OR dengan dalam setiap ekspresi Boolean.
1. SELECT pernyataan dengan ekspresi KASUS
--Simple CASE expression:
SELECT FirstName, State=(CASE StateCode
WHEN 'MP' THEN 'Madhya Pradesh'
WHEN 'UP' THEN 'Uttar Pradesh'
WHEN 'DL' THEN 'Delhi'
ELSE NULL
END), PayRate
FROM dbo.Customer
-- Searched CASE expression:
SELECT FirstName,State=(CASE
WHEN StateCode = 'MP' THEN 'Madhya Pradesh'
WHEN StateCode = 'UP' THEN 'Uttar Pradesh'
WHEN StateCode = 'DL' THEN 'Delhi'
ELSE NULL
END), PayRate
FROM dbo.Customer
2. Perbarui pernyataan dengan ekspresi KASUS
-- Simple CASE expression:
UPDATE Customer
SET StateCode = CASE StateCode
WHEN 'MP' THEN 'Madhya Pradesh'
WHEN 'UP' THEN 'Uttar Pradesh'
WHEN 'DL' THEN 'Delhi'
ELSE NULL
END
-- Simple CASE expression:
UPDATE Customer
SET StateCode = CASE
WHEN StateCode = 'MP' THEN 'Madhya Pradesh'
WHEN StateCode = 'UP' THEN 'Uttar Pradesh'
WHEN StateCode = 'DL' THEN 'Delhi'
ELSE NULL
END
3.ORDER BY klausa dengan ekspresi KASUS
-- Simple CASE expression:
SELECT * FROM dbo.Customer
ORDER BY
CASE Gender WHEN 'M' THEN FirstName END Desc,
CASE Gender WHEN 'F' THEN LastName END ASC
-- Searched CASE expression:
SELECT * FROM dbo.Customer
ORDER BY
CASE WHEN Gender='M' THEN FirstName END Desc,
CASE WHEN Gender='F' THEN LastName END ASC
4.Memiliki Klausa dengan ekspresi KASUS
-- Simple CASE expression:
SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
FROM dbo.Customer
GROUP BY StateCode,Gender,FirstName
HAVING (MAX(CASE Gender WHEN 'M'
THEN PayRate
ELSE NULL END) > 180.00
OR MAX(CASE Gender WHEN 'F'
THEN PayRate
ELSE NULL END) > 170.00)
-- Searched CASE expression:
SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
FROM dbo.Customer
GROUP BY StateCode,Gender,FirstName
HAVING (MAX(CASE WHEN Gender = 'M'
THEN PayRate
ELSE NULL END) > 180.00
OR MAX(CASE WHEN Gender = 'F'
THEN PayRate
ELSE NULL END) > 170.00)
Semoga kasus penggunaan ini akan membantu seseorang di masa depan.
SELECT
Store_Name,
CASE Store_Name
WHEN 'Los Angeles' THEN Sales * 2
WHEN 'San Diego' THEN Sales * 1.5
ELSE Sales
END AS "New Sales",
Txn_Date
FROM Store_Information;
ELSE Sales
bidang, yang mengembalikan nilai default jika tidak dimasukkan dalam pernyataan kasus, sesuai untuk permintaan bisnis.
select id,phno,case gender
when 'G' then 'M'
when 'L' then 'F'
else
'No gender'
end
as gender
from contacts
UPDATE table_name
SET column_name=CASE
WHEN column_name in ('value1', 'value2',.....)
THEN 'update_value'
WHEN column_name in ('value1', 'value2',.....)
THEN 'update_value'
END
table_name
= Nama tabel di mana Anda ingin melakukan operasi.
column_name
= Nama Kolom / Bidang nilai yang ingin Anda atur.
update_value
= Nilai yang ingin Anda atur column_name
Select s.stock_code,s.stock_desc,s.stock_desc_ar,
mc.category_name,s.sel_price,
case when s.allow_discount=0 then 'Non Promotional Item' else 'Prmotional
item' end 'Promotion'
From tbl_stock s inner join tbl_stock_category c on s.stock_id=c.stock_id
inner join tbl_category mc on c.category_id=mc.category_id
where mc.category_id=2 and s.isSerialBased=0