Я пытаюсь решить эту проблему SQL, когда мой код выдает ошибку

Недопустимая синтаксическая ошибка рядом с "<"

Когда я использую переменную @totalprice. Без использования переменной CASE работает, и запрос выполняется правильно, но я хочу, чтобы он был переменной

Благодарность

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 Янв 2021 в 23:43

3 ответа

Лучший ответ

Если вы хотите присвоить переменной результат выражения CASE - используйте этот код:

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 Янв 2021 в 20:57

Если я вас понял, вы хотите указать результат своего запроса в параметре @totalprice. Вы можете добиться этого с помощью следующего запроса:

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
Kazi Mohammad Ali Nur 16 Янв 2021 в 20:57

Попробуйте это, плюс бонусное удаление ошибок!

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

Обратите внимание на упрощение за счет удаления повторяющегося [Price(RM)] и удаления избыточных нижних границ диапазонов - when оцениваются сверху вниз с использованием первого условия соответствия.

У вас есть ошибка: если значение равно 2, ни одно из ваших условий when не выполняется, поэтому результат будет null. Этот рефакторинг также устраняет эту ошибку.

0
Bohemian 16 Янв 2021 в 21:49
65754509