首页 > 解决方案 > 根据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

标签: sqloracleselectplsqlmax

解决方案


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


推荐阅读