簡體   English   中英

SQL 服務器復合加入

[英]SQL Server complex join

我有 3 個表,如下所示

在此處輸入圖像描述

我編寫了一個 SQL 腳本來返回特定學期的所有學生科目和 class 以及分數,無論分數是否被記錄。 但是下面的腳本只返回每個科目的記錄分數。

select 
    a.StudentId, b.SubjectId, c.Score as tCA, d.Score as tExam 
from 
    tbl_StudentToClass a
join 
    tbl_SubjectToClass b on a.ClassId = b.ClassId
join 
    (select 
         sum(Score) AS Score, SubjectId, StudentId, TermId 
     from 
         tbl_Score 
     where 
         ScoreType = 1 
     group by 
         SubjectId, StudentId, TermId) c on b.SubjectId = c.SubjectId
     join 
    (select 
         sum(Score) AS Score, SubjectId, StudentId, TermId 
     from 
         tbl_Score 
     where 
         ScoreType = 2 
     group by 
         SubjectId, StudentId, TermId) d on b.SubjectId = d.SubjectId
where 
    a.ClassId = 2 and
    a.SchoolSessionId = 5 and 
    c.StudentId = a.StudentId and 
    c.TermId = 8 and
    d.StudentId = a.StudentId and 
    d.TermId = 8

如何返回所選 class 的所有科目,無論它是否有分數?

樣本數據:

在此處輸入圖像描述

您正在加入表 C,如果不存在分數,則丟棄該行。

您應該在 D 中使用 C 中的左連接。

希望能幫助到你!


此外,我會將與左連接表相關的所有條件放在視圖中,而不是放在 where 部分。

試試這個版本,告訴我它現在是否返回所有你想要的記錄(對不起,我現在沒有 SQL 服務器處於活動狀態,我無法測試它)

select 
    a.StudentId, b.SubjectId, c.Score as tCA, d.Score as t 
from 
    tbl_StudentToClass a
join 
    tbl_SubjectToClassArm b on a.ClassToClassArmId = b.ClassToClassArmId
left join 
    (select 
         sum(Score) AS Score, SubjectId, StudentId, TermId 
     from 
         tbl_Score 
     where 
         ScoreType = 1 and TermId = 1100
     group by 
         SubjectId, StudentId, TermId) c on b.SubjectId = c.SubjectId
left join 
    (select 
         sum(Score) AS Score, SubjectId, StudentId, TermId 
     from 
         tbl_Score 
     where 
         ScoreType = 2 and TermId = 1100
     group by 
         SubjectId, StudentId, TermId) d on b.SubjectId = d.SubjectId
where 
    a.ClassToClassArmId = 135 and
    a.SchoolSessionId = 1069 and 
    c.StudentId = a.StudentId and 
    d.StudentId = a.StudentId 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM