SQL Server:不存在的值的结果集零总计

时间:2016-12-13 09:59:24

标签: sql sql-server join

SQL Fiddle

我试图强制通过零值来获取我Results表中不存在的成绩,但确实存在于我的可能Grades表的列表中。

我已经设法成功加入了表格,以便使用this previous post作为指导来达到这一目标。

正如您从我的小提琴中看到的那样,结果集显示我的YearSubject列的NULL值,我希望这些值显示相关主题。

3 个答案:

答案 0 :(得分:1)

请勿在{{1​​}}中使用*,而是使用指定所需的列并使用SELECT并将其设为零,如:

ISNULL

答案 1 :(得分:0)

你需要的是一个主题和年份表,然后交叉加入成绩......

create table Subjects(SubjectID INT, Subject Varchar(50));
create table YearSub (SubjectID INT, Year INT, CrateDate Date); -- Map your available subjects for each year in here

一旦你有了thiese,做一个CTE来保存可用科目,年份和成绩的完整列表

with AllGrades as
(select SubjectID, Year, Grade
 from YearSub YS
 cross join Grades
)
select ... 
from AllGrades
left join ... 

等等

答案 2 :(得分:0)

我认为这就是你想要的。

首先,你得到学生和学生的所有组合。使用CROSS JOIN

的成绩

然后你LEFT JOIN到resutl表获得计数

select s.year, subject grade, grade, count(wag) as Total 
from   student s 
cross join grades g
left join results r on s.upn = r.upn and s.upn = r.upn
group by s.year, g.grade