将 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 WHEN
与 IN
一起使用,让 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;
我正在使用 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 WHEN
与 IN
一起使用,让 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;