在SQL中连接表并组合字段

时间:2015-09-11 13:00:49

标签: sql join

我想加入一些表格。

第一部分详细介绍了学生及其所从事的课程。

enter image description here

接下来,我有一张表格,只保存这些班级中学生的成绩。

enter image description here

如何加入这两个表,以便它只返回第二个表中的7行,但包含第一个表中的其他详细信息,例如studenthouse等?您可以使用类代码链接表,但这会删除11TOK / EE类

在第二个表中,类(11CASIBC)未在第二个表中使用,而11EEIB和11TOKIBC在第二个表中组合成一行(11TOK / EE)在第二个表的原始结果列中,TOK获得了3分,EE得分为5分。他们被组合成3 | 5的字符串。这两个结果的最终结果显示在WeightedResult列中,它是2.00。它将两行合并为一行。

我为这两个表使用了一个Left Outer Join,包括表2中的所有行,并得到以下结果。

enter image description here

它很接近但不包括11TOK / EE类及其结果。这是我使用的SQL。

SELECT b.FileYear, 
       b.FileSemester, 
       b.ClassCode, 
       b.StudentID, 
       b.StudentHouse,                                               
       b.StudentTutor, 
       a.RawResult, 
       a.WeightedResult
FROM   uStudentMerits a LEFT OUTER JOIN
       vStudentClassesAll b 
ON     a.FileYear = b.FileYear 
       AND a.FileSemester = b.FileSemester 
       AND a.ID = b.StudentID 
       AND a.ClassCode = b.ClassCode
WHERE  (b.FileYear = 2015) AND (b.FileSemester = 3) AND (b.StudentID = 43836)

如何将此更改为包含11TOK / EE类作为第7行并填充所有其他字段?注意:因为这两个类是组合在一起的,11TOK / EE的SchoolStaffCode应该始终是11TOKIBC类的老师。希望这是有道理的。任何帮助非常感谢。

1 个答案:

答案 0 :(得分:0)

您的加入条件不太正确。您需要执行以下操作,通过在您要过滤的条件下强制加入来获得您所获得的结果:

  SELECT b.FileYear, 
           b.FileSemester, 
           b.ClassCode, 
           b.StudentID, 
           b.StudentHouse,                                               
           b.StudentTutor, 
           a.RawResult, 
           a.WeightedResult
    FROM   uStudentMerits AS a 
    LEFT OUTER JOIN
           vStudentClassesAll AS b 
    ON     a.FileYear = b.FileYear 
           AND a.FileSemester = b.FileSemester 
           AND a.ID = b.StudentID 
           AND a.ClassCode = b.ClassCode
           AND b.FileYear = 2015 
           AND b.FileSemester = 3 
           AND b.StudentID = 43836