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

时间:2018-04-08 19:14:15

标签: sql oracle

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

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;

我不知道我错过了什么?

2 个答案:

答案 0 :(得分:2)

您不应该使用CASE价格和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;

答案 1 :(得分:0)

我建议将其写成:

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>表单。
  • newprice无需SELECT两次。
  • 我不建议两次使用TRUNC()逻辑。为保持一致性,请将case参数设为trunc()