[英]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.