将 CASE 与 Table 结合使用

Using CASE with Table Join

我正在使用 Oracle 11g。

我有两个表:

我想显示 student_name、课程、费用和带有折扣费用的列,如果是 'BIT' 或 'MIT',则费用减少 10%。

我提出了以下查询,但它给出了一个错误:

ORA-00923: FROM keyword not found where expected:

SQL> SELECT Student.student_name, Specification.course, Specification.specification_name, Specification.fee
  2  FROM Student
  3  JOIN Specification ON Student.specification_id = Specification.specification_id
  4     CASE Specification.course WHEN 'BIT' THEN 0.9 * Specification.fee
  5                               WHEN 'MIT' THEN 0.9 * Specification.fee
  6     ELSE Specification.fee END "DISCOUNTED FEE";

根据你的问题,你似乎需要在 SELECT 中使用 CASE WHEN 而不是 FROM

SELECT Student.student_name, Specification.course, Specification.specification_name, Specification.fee,
       (CASE WHEN  Specification.cours = 'BIT' THEN 0.9 * Specification.fee
             WHEN  Specification.cours = 'MIT' THEN 0.9 * Specification.fee
        ELSE Specification.fee END) "DISCOUNTED FEE"
FROM Student
JOIN 
    Specification ON Student.specification_id = Specification.specification_id;

我想将 CASE WHENIN 一起使用,让 SQL 更干净。

SELECT Student.student_name, Specification.course, Specification.specification_name, Specification.fee,
       (CASE WHEN Specification.cours IN ('BIT','MIT') THEN 0.9 * Specification.fee
        ELSE Specification.fee END) "DISCOUNTED FEE"
FROM Student
JOIN 
    Specification ON Student.specification_id = Specification.specification_id;

您可以按如下方式使用decode

SELECT Student.student_name, 
       Specification.course, 
       Specification.specification_name, 
       decode(Specification.course, 'BIT', 0.9, 'MIT', 0.9, 1)
         * Specification.fee AS "DISCOUNTED FEE"
  FROM Student
  JOIN Specification ON Student.specification_id = Specification.specification_id;