首页 > 解决方案 > 在单个查询中通过 oracle 获取基于优先级的单个记录

问题描述

我在 Oracle SQL 中有一个表,如下所示。

  Account_Id     Account_No              BS               STATUS
    1               10                    V                 ACTV
    2               11                    S                 DIS
    3               12                    E                NOTACTV
    4               10                    S                 DIS
    5               12                    E                 ACTV
    6               12                    V                 ACTV

我需要获得具有以下提及优先级的帐号(一条记录)。

 1) BS = V && STATUS = ACTV
 2) BS = S && STATUS = ACTV
 3) BS = E && STATUS = ACTV
 4) BS = V && STATUS = NOTACTV
 5) BS = S && STATUS = NOTACTV
 6) BS = E && STATUS = NOTACTV
 7) BS = V && STATUS = DIS
 8) BS = S && STATUS = DIS
 9) BS = E && STATUS = DIS

我尝试使用三个带有 V 的 sql 查询并检查状态 ACTV 和 NOTACTV。我想在一个 sql 查询中获取数据以优化它。

这个怎么做??

标签: sqldatabaseoracle

解决方案


我想你想要:

select t.*
from (select t.*
      from t
      order by (case status when 'ACTV' then 1 when 'NOTACTIV' then 2 WHEN 'DIS' then 3 else 4 end),
               (case BS when 'V' then 1 when 'S' then 2 when 'E' then 3 else 4 end)
    ) t
where rownum = 1;

如果您使用的是 Oracle 12c+,则可以使用fetch first并且不需要子查询。

是一个工作版本。


推荐阅读