Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据特定列中值(按顺序)的可用性筛选SQL中的数据?_Sql_Oracle - Fatal编程技术网

如何根据特定列中值(按顺序)的可用性筛选SQL中的数据?

如何根据特定列中值(按顺序)的可用性筛选SQL中的数据?,sql,oracle,Sql,Oracle,我不知道我是否正确地提出了这个问题,但让我举个例子来总结这个问题 SELECT * FROM EMPLOYEE WHERE EMPLOYEE.TYPE IN ('CEO', 'MANAGER', 'LEAD', 'DEVELOPER') 在这里,您可以看到所有的行都将返回,其中的值位于所提到的值之内 我想要的是,如果表中存在“CEO”,只返回CEO的记录。如果没有,则返回带有“MANAGER”的记录,依此类推 根据排序逻辑,只应返回一条记录(基于可用性) 此外,这是一个更大的SQL查询的一

我不知道我是否正确地提出了这个问题,但让我举个例子来总结这个问题

SELECT * 
FROM EMPLOYEE 
WHERE EMPLOYEE.TYPE IN ('CEO', 'MANAGER', 'LEAD', 'DEVELOPER')
在这里,您可以看到所有的行都将返回,其中的值位于所提到的值之内

我想要的是,如果表中存在“CEO”,只返回CEO的记录。如果没有,则返回带有“MANAGER”的记录,依此类推

根据排序逻辑,只应返回一条记录(基于可用性)

此外,这是一个更大的SQL查询的一部分,因此如果有一个解决方案可以在一行或两行中实现这一点,将非常有用。

您可以使用
rank()


WHERE
子句中使用
CASE
。如果你不懂逻辑,检查答案,
select e.*
from (select e.*,
             rank() over (order by case e.type when 'CEO' then 1 when 'MANAGER' then 2 when 'LEAD' then 3 WHEN 'DEVELOPER' then 4 else 5 end) as seqnum
      from e
      where e.TYPE in ('CEO','MANAGER','LEAD','DEVELOPER')
     ) e
where seqnum = 1;