Pernyataan pertanyaan:
Pertanyaan berikut cuba menggunakan pernyataan CASE dalam klausa WHERE untuk menapis berdasarkan nilai @locationType dan @locationID:
<code class="language-sql">declare @locationType varchar(50); declare @locationID int; SELECT column1, column2 FROM viewWhatever WHERE CASE @locationType WHEN 'location' THEN account_location = @locationID WHEN 'area' THEN xxx_location_area = @locationID WHEN 'division' THEN xxx_location_division = @locationID END;</code>
Ralat:
Pertanyaan ini mengakibatkan ralat sintaks kerana ungkapan CASE menjangkakan satu nilai pulangan. Pelbagai klausa WHEN salah memasukkan perbandingan kesamaan (= @locationID) yang bukan ungkapan CASE.
Penyelesaian:
Sintaks yang betul untuk menggunakan pernyataan CASE dalam klausa WHERE adalah untuk menetapkan ungkapan kepada lajur sasaran:
<code class="language-sql">declare @locationType varchar(50); declare @locationID int; SELECT column1, column2 FROM viewWhatever WHERE @locationID = CASE @locationType WHEN 'location' THEN account_location WHEN 'area' THEN xxx_location_area WHEN 'division' THEN xxx_location_division END;</code>
Dalam pertanyaan yang diubah suai ini, ungkapan CASE mengembalikan pengecam lokasi yang sepadan berdasarkan nilai @locationType. Klausa WHERE kemudian membandingkan nilai ini dengan @locationID untuk menapis hasil seperti yang diharapkan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Penyata KES dalam Klausa SQL WHERE untuk Penapisan Bersyarat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!