选择任意值为最大值

时间:2017-02-17 21:39:42

标签: sql oracle max rank

我有两张桌子,学生和LOG。

每个学生的LOG表可能包含0个或更多记录。 LOG表中的记录按SUBTYPE列分类。 SUBTYPE的值为:'H','L1','L2','L3','M','P1','P2'和'Px'。

我正在尝试生成一个报告,该报告将列出每个学生姓名一次,以及LOG表中最严重的代码。

我自然会想到MAX(子类型),但这不起作用,因为我没有尝试选择子类型的实际最大字母数字值 - 我试图根据预定义的“SEVERITY”进行选择。严重性,BTW,没有存储在数据库中,所以我需要在查询内部以某种方式定义它。

例如......

STUDENTS TABLE
ID       LAST_NAME       FIRST_NAME
------------------------------------
2        Smith           John
3        Jones           Bob
4        Bower           Jack


LOG TABLE
ID      STUDENTSID       SUBTYPE
------------------------------------
1       2                 P1
2       2                  M
3       2                 L1
4       3                 L2
5       3                 P2
6       3                  H

实际上应将子类型值排序/排序为:

(From Least Severe)
1. P1
2. L1
3.  M
4. L2
5. P2
6.  H
7. L3
8. Px
(To Most Severe)

以下是我需要报告的内容。请注意,Jack Bower不在报告中,因为他在日志表中没有任何记录。

DESIRED REPORT OUTPUT:
John Smith --- M
Bob Jones ---- H

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

您需要使用var Result = client.PostAsync(APIURL, httpContent).Result; if(Result.IsSuccessStatusCode) { var responseStr = Result.Content.ReadAsStringAsync(); dynamic jsonObject = JsonConvert.DeserializeObject<object>(responseStr.ToString()); } 函数相应地确定子类型的优先级。然后为每个学生选择第一行。

row_number

答案 1 :(得分:0)

order by
  case subtype
    when 'P1' then 1
    when 'L1' then 2
    when 'M'  then 3
    ...
  end