如何根据特定列中值(按顺序)的可用性筛选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;