将 CASE 与表连接一起使用
Posted
技术标签:
【中文标题】将 CASE 与表连接一起使用【英文标题】:Using CASE with Table Join 【发布时间】:2020-12-16 01:19:31 【问题描述】:我正在使用 Oracle 11g。
我有两张桌子:
我想显示 student_name、课程、费用和一个带有折扣费用的列,如果是“BIT”或“MIT”,费用将减少 10%。
我想出了以下查询,但它给出了一个错误:
ORA-00923:未在预期位置找到 FROM 关键字:
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";
【问题讨论】:
我不熟悉 Oracle,但对于大多数 SQL,您会在 from 之前添加 case 表达式。 我也试过了,还是报同样的错误 我对此表示怀疑,请告诉我们 另外我强烈建议使用表别名以提高可读性。 您使用的是什么版本的 Oracle?执行SELECT * FROM V$VERSION
,然后编辑您的问题并包含此信息以及表的规范(所有字段名称、数据类型和键(主键和外键))。这可能让我们理解为什么一个简单的 CASE 表达式会导致这样的困难。
【参考方案1】:
根据您的问题,您似乎需要在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;
【讨论】:
这给出了一个错误 ORA-00905:在 CASE 语句中缺少关键字。明白要点谢谢 @SamitPaudel 我的编辑答案对你有用吗?【参考方案2】:你可以使用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;
【讨论】:
谢谢,这正是我想要做的。以上是关于将 CASE 与表连接一起使用的主要内容,如果未能解决你的问题,请参考以下文章
Oracle表与表之间的连接方式(内连接:inner join 外连接 全连接: full outer join左连接:left outer join 右连接:right outer join(代码