【问题标题】:Select field based on other column max value in oracle pl/sql根据oracle pl/sql中的其他列最大值选择字段
【发布时间】:2020-09-22 18:41:50
【问题描述】:

我正在计算视图中一个名为“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

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助。
  • @GordonLinoff 我添加了示例数据,谢谢!

标签: sql oracle select plsql max


【解决方案1】:

如果您使用的是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2021-09-18
    • 2021-11-12
    • 2021-09-09
    • 1970-01-01
    • 2014-09-15
    • 2020-03-07
    相关资源
    最近更新 更多