代码之家  ›  专栏  ›  技术社区  ›  javalearner_heaven

oracle sql函数返回一个或多个值

  •  0
  • javalearner_heaven  · 技术社区  · 7 年前

    桌子 学科与学生关系

    • 1)学生姓名/身份证
    • 2)受试者姓名
    • 3)课程类型(自有/共享)

    查看 主题信息

    • 1)学生姓名
    • 2)课程状态(一个/多个)

    我需要一个函数来传递学生的名字,我需要检查与之相关的所有科目如果某个科目共享了任何课程类型,则返回many;否则返回one。

    我受够了

    with and sum case课程类型是共享的>1,但我得到的所有科目都是一个或多个。如何为学生评价?

    单独计算是行不通的,因为对于同一个学生来说,迈克尔在数学课上有两个记录,一个是自己的,另一个是兰克的,一个特殊的条目表示他是兰克。

    主题信息是让迈克尔这个主题是数学科学他是自己的和科学他也是自己的,但对于数学伊丽莎白是共享的,然后课程状态是共享如何实现这一点。

    enter image description here

    enter image description here

    我在为课程做我需要同样的逻辑给学生 enter image description here

    1 回复  |  直到 7 年前
        1
  •  0
  •   Littlefoot    7 年前

    也许是这样的?

    function f_student (par_student_name in varchar2) 
      return varchar2
    is
      l_cnt number;  -- number of "shared" courses
    begin
      select count(*)
        into l_cnt
        from subject_student_relation r join subject_info i on i.student_name = r.student_name
      where r.student_name = par_student_name
        and r.course_type = 'shared';
    
      return case when l_cnt > 0 then 'many'
                  else 'one'
             end;
    end;         
    

    用名字来区分人是不寻常的(至少在IT领域,不是在日常使用中),因为有些人有相同的名字。如果有两个叫“迈克尔杰克逊”的学生-你怎么知道你在看哪个科目我想你需要一个身份证。