SQL ORACLE集合运算符

SQL ORACLE集合运算符,sql,oracle,Sql,Oracle,我有一个练习,要求向部门10,20,50出示职务id和部门id,并按照10,50,20的具体顺序进行订购 我的选择语句 select job_id,department_id from employees INTERSECT select job_id,department_id from employees where department_id IN (10,20,50) ORDER BY 2,CASE department_id WHEN 10 then 1

我有一个练习,要求向部门10,20,50出示职务id和部门id,并按照10,50,20的具体顺序进行订购

我的选择语句

select job_id,department_id
from employees
INTERSECT
select job_id,department_id
from employees
where department_id IN (10,20,50)
ORDER BY 2,CASE department_id WHEN 10 then 1
                            WHEN 50 then 2
                            WHEN 20 then 3
                            ELSE THEN 4
                            END 
消息输出为

ORA-01785:ORDER BY item必须是选择列表表达式的编号


您可以使用大小写表达式进行条件排序:

select job_id, department_id
from employees
where department id in (10, 20, 50)
order by 
    case department_id 
        when 10 then 1
        when 50 then 2
        when 20 then 3
    end,
    job_id
这将根据您的自定义部门订单,然后根据作业id来订购记录

由于您使用的是Oracle,因此可以使用decode缩短order by子句:


注意:我在这个查询中没有看到相交点,所以我删除了它;但如果出于某种原因需要if,上述order by子句仍将保持不变。

语句中存在语法错误。在ORDERBY子句中,您应该使用

CASE department_id WHEN 10 then 1
                        WHEN 50 then 2
                        WHEN 20 then 3
                        ELSE 4
                        END
而不是

CASE department_id WHEN 10 then 1
                        WHEN 50 then 2
                        WHEN 20 then 3
                        ELSE THEN 4
                        END

基本上,您不应该将THEN放在ELSE子句中。

查询中的case语句存在问题

您没有正确使用case语句,ELSE子句中缺少值

此外,您提到的要求不需要INTERSECT

<> P>你可以简单地考虑这样的事情,将50作为11,使10-50-20转换为10-11-20阶。
SELECT
    JOB_ID,
    DEPARTMENT_ID
FROM
    EMPLOYEES
WHERE
    DEPARTMENT_ID IN (
        10,
        20,
        50
    )
ORDER BY
    DECODE(DEPARTMENT_ID, 50, 11, DEPARTMENT_ID) , JOB_ID

干杯

我不明白为什么要将intersect用于此查询。因为实践要求使用set operate进行此查询。我不认为这是你想要的,即使代码有效。你可能想问一个新问题,包括样本数据、期望结果、,以及您想要的逻辑解释。实践要求使用set operate执行此查询,我执行了您向我提到的操作,但我仍然有相同的错误。我找到了解决方案,将此查询用作表并从中检索结果,然后按特定顺序对其进行排序语法为SELECT job\u id,department\u id from SELECT job\u id,员工交集中的部门id从员工中选择工作id、部门id,其中部门id按其帮助您的部门id、10、1、50、2、20、3、4的顺序排列在10、20、50中。!!
SELECT
    JOB_ID,
    DEPARTMENT_ID
FROM
    EMPLOYEES
WHERE
    DEPARTMENT_ID IN (
        10,
        20,
        50
    )
ORDER BY
    DECODE(DEPARTMENT_ID, 50, 11, DEPARTMENT_ID) , JOB_ID