【发布时间】:2015-07-23 11:08:15
【问题描述】:
这是我的 SQL 查询
SELECT p.StudentID, ai.RollNo, p.FirstName, p.MiddleName, p.LastName,
om.ExamID, et.ExamName, om.SubjectID,
ISNULL(CONVERT(varchar(20),om.ObtainedMarksTheory), 'A') as 'ObtainedMarksTheory',
ISNULL(CONVERT(varchar(20),om.ObtainedPracticalMarks),'A') as 'ObtainedPracticalMarks'
FROM Students.PersonalInfo p
INNER JOIN Students.AcademicCourse ac on p.StudentID = ac.StudentID
INNER JOIN Students.AcademicInfo ai on p.StudentID=ai.StudentID
LEFT OUTER JOIN Exam.ObtainedMarkEntry om on p.StudentID = om.StudentID
LEFT JOIN Exam.ExamType et on om.ExamID = et.ExamID
WHERE ai.BatchID = '103' AND ai.SemesterID = '21' and ac.Section = '8'
这会产生如图所示的结果:
但我想要这样的结果,因为那两个学生没有参加那次考试
同样,如果三个学生中的任何一个确实存在另一场考试而其他学生缺席,则应重复相同的程序
【问题讨论】:
-
你能解释一下你试图实现的输出背后的逻辑吗?这些“默认”值从何而来?
-
在这个特定的结果集中,学生参加了考试。在上述结果中,rollno 1 的学生参加了 ExamID 28 的考试,但其余两人没有参加,但考试是强制性的。因此,ExamID、ExamName、SubjectID 字段也应该填充给那些没有参加的学生。其余两列的值为 A 表示不存在。
-
图片出现问题。他们也变成了NULL
标签: sql sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012