我在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查询中获取数据,以便对此进行优化。
如何做到这一点?
发布于 2018-05-31 20:57:35
我认为你想要:
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,并且不需要子查询。
Here是一个工作版本。
https://stackoverflow.com/questions/50624808
复制相似问题