【发布时间】:2018-11-28 17:04:31
【问题描述】:
以下查询返回错误。帮我下错误和条件命令的实现方式。我试图在等级 >=8 时按等级和名称排序,当等级
SELECT
name, grade, marks
FROM
students, grades
WHERE
min_mark <= marks
AND marks <= max_mark
AND marks >= 70
UNION
SELECT
TO_CHAR('NULL') AS name, grade, marks
FROM
students, grades
WHERE
min_mark <= marks
AND marks <= max_mark
AND marks <= 69
order by grade desc,(case when grade >= 8
then name
when grade < 8
then marks
end );
错误:
按等级排序,(等级> = 8时的情况
*
第 18 行出现错误:
ORA-01785: ORDER BY 项目必须是 SELECT 列表表达式的编号
【问题讨论】:
-
试过但没用。错误仍然存在。
-
试试
case when grade >= 8 then name else marks end。原始 SQL 是否包含星号 ** ?它不应该。 -
它也不应该在一个分支中有一个字符串值而在另一个分支中有一个数字;为此将标记转换为字符串是没有意义的。
TO_CHAR('NULL')也没有,虽然真的;那应该是cast(null as varchar2(20))还是什么? -
乍一看,我认为这只是 order by 范围的错误,但再次检查后,您的查询似乎有几个问题。使用文本格式的示例数据告诉我们您希望看到的确切输出。
-
请也向我们展示错误信息。
标签: oracle join sql-order-by union