这是我的问题(我正在使用SQL Server)SQL - 从多个表中选择计数
我有一个表Students (StudentId, Firstname, Lastname, etc)
。
我有记录StudentAttendance (StudentId, ClassDate, etc.)
我记录其他学生活动(我在这里概括为简单起见),如表Papers
一个(StudentId, PaperId, etc.)
表。可能有从0到20个文件转入的任何地方。同样,有一个表Projects (StudentId, ProjectId, etc.)
。与Papers
相同。
我想要做的是为参加超过一定水平的学生(例如10名出勤)创建一个计数列表。事情是这样的:
ID Name Att Paper Proj
123 Baker 23 0 2
234 Charlie 26 5 3
345 Delta 13 3 0
以下是我有:
select
s.StudentId,
s.Lastname,
COUNT(sa.StudentId) as CountofAttendance,
COUNT(p.StudentId) as CountofPapers
from Student s
inner join StudentAttendance sa on (s.StudentId = sa.StudentId)
left outer join Paper p on (s.StudentId = p.StudentId)
group by s.StudentId, s.Lastname
Having COUNT(sa.StudentId) > 10
order by CountofAttendance
如果CountofPaper
和join(无论是内部或左外)的Papers
表被注释掉,查询工作正常。我收到了至少参加过10节课的学生。
但是,如果我把CountofPapers
和加入,事情变得疯狂。通过左外连接,任何有论文的学生只会在论文栏中显示出席人数。通过内部联合,出勤率和纸张计数似乎可以相互叠加。
指导需要和赞赏。
戴夫
谢谢billinkc,波西米亚和亚历克斯Aza伟大的答案。我非常感谢你们每个人花时间制定解决方案的时间。我将把波希米亚的标记作为答案,但我认为每个解决方案都能奏效。我在答案中遇到的唯一问题是波希米亚,因为某些原因,“使用CountofAttendance> 10”的情况下,SSMS不认为它是一列。我最终复制了“as CountofAttendance”中的选择,并且查询起作用(无效,毫无疑问)。 CountAttendance的顺序很好,这是很奇怪的部分。也感谢marc_s的编辑。最好,戴夫 – Dave