我有一个表,其中包括学生所选的每门课程的一行.我需要一个查询,它将返回一行数学和英语(学分为0),即使学生在那个学期没有修过这些课程.
我有表年级:
Student | Year | Term | CourseTitle | Subject | Credit |
---|---|---|---|---|---|
1 | 2022 | Trimester 1 | Writing 1 | English | .5 |
1 | 2022 | Trimester 1 | Algebra 1 | Math | .5 |
1 | 2022 | Semester 2 | Writing 2 | English | .5 |
1 | 2022 | Semester 2 | PE 1 | PE | .5 |
1 | 2023 | Semester 1 | Reading 1 | English | .5 |
2 | 2020 | Quarter 1 | Algebra 1 | Math | .5 |
2 | 2020 | Quarter 2 | Algebra 2 | Math | .5 |
2 | 2020 | Quarter 4 | Biology | Science | .5 |
我想:
Student | Year | Term | CourseTitle | Subject | Credit |
---|---|---|---|---|---|
1 | 2022 | Trimester 1 | Writing 1 | English | .5 |
1 | 2022 | Trimester 1 | Algebra 1 | Math | .5 |
1 | 2022 | Semester 2 | Writing 2 | English | .5 |
1 | 2022 | Semester 2 | NULL | Math | 0 |
1 | 2022 | Semester 2 | PE 1 | PE | .5 |
1 | 2023 | Semester 1 | Reading 1 | English | .5 |
1 | 2023 | Semester 1 | NULL | Math | 0 |
2 | 2020 | Quarter 1 | NULL | English | 0 |
2 | 2020 | Quarter 1 | Algebra 1 | Math | .5 |
2 | 2020 | Quarter 2 | NULL | English | 0 |
2 | 2020 | Quarter 2 | Algebra 2 | Math | .5 |
2 | 2020 | Quarter 4 | NULL | English | 0 |
2 | 2020 | Quarter 4 | NULL | Math | 0 |
2 | 2020 | Quarter 4 | Biology | Science | .5 |
我怎样才能做到这一点呢?
我试过了:
WITH MathEnglish AS
(
SELECT DISTINCT Subject
FROM Grades
WHERE Subject IN ('English', 'Math')
), Terms AS
(
SELECT DISTINCT Term
FROM Grades
), Combined AS
(
SELECT *
FROM MathEnglish
CROSS JOIN Terms
)
SELECT DISTINCT
Student, Year,
c.Term, g.CourseTitle,
COALESCE(g.Subject, c.Subject), g.Credit
FROM
Combined c
FULL OUTER JOIN
Grades g ON c.Term = g.Term
...但这并不能解决问题.我需要一种不同的方法,但我不确定它是什么.
注:如果一个学生在一个学期里没有获得任何学分,我就不需要数学和英语行