我想不出一个非常好的标题,所以让我解释一下。
我列出了学生缺席的日子(dbo.Attendance)。
我还有学校开放的日子清单(dbo.DateCollection)。
我的问题是...... 是否有一些原因让我加入/合并两个表到一个列表,显示每个学生每天出席的情况?像这样......
任何帮助或指示都将受到赞赏!!
答案 0 :(得分:3)
是。您可以通过加入表格来完成此操作。在这种情况下,这有点棘手,因为你必须在所有日子里为所有学生开始一行,然后看看学生是否在场。我假设您有一个Students
表:
select s.personid, c.calendarid, c.date, coalesce(a.absentMinutes, 0) as absentMinutes
from Calendar c cross join
Students s left outer join
Attendance a
on a.dateOccurred = c.date and
a.personid = s.personid;
如果您没有学生表,那么您就遇到了问题。您只能报告Attendance
表中的学生。你可以这样做:
select s.personid, c.calendarid, c.date, coalesce(a.absentMinutes, 0) as absentMinutes
from Calendar c cross join
(select distinct personid from Attendance) s left outer join
Attendance a
on a.dateOccurred = c.date and
a.personid = s.personid;
答案 1 :(得分:0)
感谢您的所有输入。
我最后还为学生们使用了一张桥牌桌。 这就是我为我工作的原因。
SELECT s.personid,
dc.calendarid,
dc.[date],
coalesce(absentMinutes,0) AS absentMinutes
FROM [dbo].[StudentCalendar] s INNER JOIN
[dbo].[DateCollection] dc ON s.calendarId=dc.calendarId LEFT JOIN
[dbo].[Attendance] a ON a.dateOccurred=dc.[date] AND a.personId=s.personId