sql - 根据oracle pl/sql中的其他列最大值选择字段
问题描述
我正在一个视图中计算一个名为“Degree Level”的字段。这是“学位”表中的一个字段,该表显示了每个教员的学位。一名教员可以拥有多个学位。
“学位级别”字段也在表“Crosswalk_Table”中。我想根据 Crosswalk_table 中“Degree_Hierarchy”列中的最大值为教员选择学位级别。
下面的代码显示学位级别的“硕士”而不是“博士”(具有更高的层次值)。非常感谢任何帮助,谢谢。
CAST (
(SELECT DEGREE_LEVEL
FROM Degrees D, Crosswalk_Table E
WHERE
E.DEGREE_HIERARCHY =
(SELECT MAX (DEGREE_HIERARCHY)
FROM Crosswalk_Table
WHERE DEGREE_CODE = D.FACULTY_DEGREE_CODE)
AND D.FACULTY_DEGREE_CODE = E.DEGREE_CODE
AND D.PERSON_SKEY = SRC.PERSON_SKEY
AND ROWNUM <=1
ORDER BY DEGREE_HIERARCHY DESC)
AS VARCHAR2 (50))
样本数据:
度数表:
Person_skey Degree_Code
-------------------------
123456 MA
123456 JD
Crosswalk_Table:
degree_level degree_code degree_hierarchy
---------------------------------------------
master MA 30
doctor JD 40
解决方案
如果您使用的是 Oracle 12 或更高版本,那么您可以使用这样的子查询(使用 ORDER BY 和 LIMIT 到 1 行):
SELECT c.DEGREE_LEVEL
FROM Degrees d
JOIN CROSSWALK_TABLE c
ON c.Degree_Code = d.Degree_Code
WHERE d.Person_skey = 123456
ORDER BY c.DEGREE_HIERARCHY DESC
FETCH FIRST ROW ONLY
请看一下这个简单的演示: https ://dbfiddle.uk/?rdbms=oracle_18&fiddle=c8d41924c593f4f361de59a611a363cc
推荐阅读
- r - R:无法为多元正态性运行 shapiro-wilk 检验
- vb.net - 我将如何为 Visual Studio 选择一个特定的文件路径来读取和写入除调试文件夹之外的其他文件
- javascript - 如何将 Laravel 表中的多个复选框保存到数据库中?
- angular - 如何在 bootstrap 4.3.1 和 angular 8 中使用表单验证
- json - 如何从 yang 模块生成 JSON 模式?
- python - 读取 WSGI 处理程序时发生错误。在 IIS 上托管 DJango 时出现 ModuleNotFoundError'。找不到设置
- javascript - 单击按钮时停止并清除函数的执行
- ios - 使用预加载器在 UITableView 顶部插入最新的单元格 - SWIFT 4
- python - pip install 引发了 BadZipfile,“文件不是 zip 文件”
- tfs - 可以在 Build Agent 上将 VS 2019 构建与 TFS 2017 混合使用吗?