使用 case when variable 时 '<' 附近的无效语法错误,在没有变量的情况下工作正常

Invalid syntax error near '<' when using case when variable, works fine without variable

我正在尝试解决这个 SQL 我的代码抛出错误的问题

Invalid syntax error near '<'

当我使用变量 @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

试试这个,加上额外的 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

注意通过删除重复的 [Price(RM)] 和删除冗余范围下限的简化 - when 使用第一个匹配条件自上而下进行评估。

您有一个错误:如果值为 2,则您的 when 条件中的 none 已满足,因此结果将为 null。此重构也解决了此错误。

如果我没看错,那么您想将查询结果设置到@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

但是无论 table 中有多少行,您都只会获得最后一条记录的值。

如果您想将 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
```