Return 基于所选的值

Return based on values selected

我真的不知道如何正确表达标题,如果标题令人困惑,请原谅。

这是我面临的情况: 我有一个 table...假设它包含以下行。

Name  | Value
----- | ----
John  | 1
Mary  | 2
Jack  | 3
Jim   | 4

这是 PL/SQL 要求:

  1. 如果 John 存在,return John 和他的值。
  2. 如果约翰不存在,但玛丽存在,return玛丽和她的价值。
  3. 如果约翰和玛丽都不存在,return杰克或吉姆,以两者为准 具有较高的价值。

我能够使用游标遍历 table 并测试每一行,但我想知道是否还有其他更有效的方法。

谢谢!

不需要游标和循环。您可以在单个查询中执行此操作,使用条件排序和 fetch 子句:

select *
from mytable
order by 
    case name when 'John' then 1 when 'Mary' then 2 else 3 end, 
    value desc
fetch first row only 

或者如果您是 12c 之前的 Oracle 版本,其中 fetch 子句不可用:

select name, value
from (
    select t.*, 
        row_number() over(order by 
            case name when 'John' then 1 when 'Mary' then 2 else 3 end, 
            value desc
        ) rn
    from mytable t
) t
where rn = 1