使用 SQL CASE 语句比较日期并进行乘法运算



我正在尝试输出艺术名称、价格和新价格。 新价格基于艺术品的购买日期。 如果是在 2010 年之前,则增长 10%,如果是在 2010 年,则增长 5%。 我正在使用案例陈述,但似乎无法超越我所处的位置。 我不断在第 00905 行收到 ORA-3 缺少关键字错误。

SELECT artname, price, newprice,
CASE Price
WHEN DtAcquired < '01-JAN-2010' THEN TRUC(price*1.10, 2)
ELSE TRUNC(price*1.05, 2)
END AS newprice
FROM Arts;

知道我错过了什么吗?

您不应该将 CASE price 和 WHEN 与条件一起使用,而在这种情况下直接在 WHEN 上使用案例,例如:

SELECT artname, price, 
CASE 
WHEN DtAcquired < '01-JAN-2010' 
THEN TRUNC(price*1.10, 2)
ELSE TRUNC(price*1.05, 2)
END AS newprice
FROM Arts;

我建议把它写成:

SELECT artname, price,
TRUNC(CASE WHEN DtAcquired < DATE '2010-01-01' THEN price*1.10 ELSE price*1.05
END, 2) as newprice
FROM Arts;

一些注意事项:

  • 问题是混合两种类型的case表达式。 只需使用when <condition>表单即可。
  • 无需在SELECTnewprice两次.
  • 我不建议将TRUNC()逻辑进行两次。 为了保持一致性,请将case作为trunc()的参数。

最新更新