Saya mencoba menyelesaikan masalah SQL ini di mana kode saya menimbulkan kesalahan

Kesalahan sintaks tidak valid di dekat '<'

Ketika saya menggunakan variabel @totalprice. Tanpa menggunakan variabel, CASE berfungsi dan kueri dijalankan dengan benar tetapi saya menginginkannya sebagai variabel

Terima kasih

Declare @totalprice int
Select 
Case @totalprice
      when "Age" < 2 THEN [Price(RM)]+100 
      when "Age" > 2 AND "Age" <= 11 THEN [Price(RM)]+200
      when "Age" > 11 AND "Age" <= 17 THEN [Price(RM)]+300
      when "Age" > 17 AND "Age" <= 64 THEN [Price(RM)]+500
      when "Age" >= 65 THEN [Price(RM)]+200
END AS Total_Price
From Reservation
1
Nathan S 16 Januari 2021, 23:43

3 jawaban

Jawaban Terbaik

Jika Anda ingin menetapkan hasil ekspresi CASE ke variabel Anda - gunakan kode ini:

DECLARE @totalprice int

SELECT
    @totalprice = CASE
                     WHEN Age < 2 THEN [Price(RM)] + 100 
                     WHEN Age > 2 AND Age <= 11 THEN [Price(RM)] + 200
                     WHEN Age > 11 AND Age <= 17 THEN [Price(RM)] + 300
                     WHEN Age > 17 AND Age <= 64 THEN [Price(RM)] + 500
                     WHEN Age >= 65 THEN [Price(RM)] + 200
                  END 
FROM
    Reservation
```
0
marc_s 16 Januari 2021, 20:57

Jika saya benar maka Anda ingin mengatur hasil kueri Anda menjadi parameter @totalprice. Anda dapat mencapainya dengan kueri di bawah ini:

Declare @totalprice int
Select @totalprice=
Case 
      when "Age" < 2 THEN [Price(RM)]+100 
      when "Age" > 2 AND "Age" <= 11 THEN [Price(RM)]+200
      when "Age" > 11 AND "Age" <= 17 THEN [Price(RM)]+300
      when "Age" > 17 AND "Age" <= 64 THEN [Price(RM)]+500
      when "Age" >= 65 THEN [Price(RM)]+200
END 
From Reservation

Tetapi tidak peduli berapa banyak baris yang Anda miliki dalam tabel, Anda hanya akan mendapatkan nilai catatan terakhir.

0
Kazi Mohammad Ali Nur 16 Januari 2021, 20:57

Coba ini, plus bonus penghapusan bug!

declare @totalprice int

select @totalprice = [Price(RM)] + case
  when Age < 2 then 100 
  when Age <= 11 then 200
  when Age <= 17 then 300
  when Age <= 64 then 500
  else 200
end as Total_Price
from Reservation

Perhatikan penyederhanaan dengan menghapus [Price(RM)] berulang dan menghapus batas bawah rentang yang berlebihan - when dievaluasi dari atas ke bawah dengan kondisi pencocokan pertama yang digunakan.

Anda memiliki bug: Jika nilainya 2, tidak satu pun dari ketentuan when Anda terpenuhi, sehingga hasilnya adalah null. Refactoring ini menangani bug ini juga.

0
Bohemian 16 Januari 2021, 21:49