sql - 在单个查询中通过 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 查询中获取数据以优化它。
这个怎么做??
解决方案
我想你想要:
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
并且不需要子查询。
这是一个工作版本。
推荐阅读
- python - VS Code:找不到用于 ipykernel 启动的内核规范
- typescript - vim 标记的模板文字语法区域在打字稿中不起作用
- pattern-matching - 使用 python POO 进行图挖掘:创建图并测试匹配
- node.js - 在电子反应应用程序中导入 whatsapp-web.js nodejs 模块的问题
- windows - 我可以获得适用于 Windows 32 位的 MongoDB Shell 吗?
- linux - 未设置带有 PKG_CHECK_MODULES 的 Autoconf
_CFLAGS 和 _LIBS 变量 - regex - 正则表达式在 \n 和 \t 之间选择字符,中间有数字
- java - Android 导航组件 - 如果用户未登录,则导航到其他活动
- graphql - 在 Graphql (NestJs) 中扩展泛型类型
- javascript - 其他js文件上的异步函数总是返回未定义,但函数运行