這是我的問題(我正在使用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