2011-12-20 75 views
0

我已經花費數小時試圖構建此查詢,因此我需要您的幫助以便我可以做到這一點。 這是表Students(做出來的內部連接):SQL Server查詢以瞭解某列中的某個ID是否與另一列中的某個ID相同

SpecialtyChosenID StudentID Subject SubjectSpecialtyID 
5ABFB416-8137   15  Math   A1EBF3CB-E899 
5ABFB416-8137   15  English  A1EBF3CB-E899 

在它的信息是指與ID的學生沒有。 15選擇了與ID的專業5ABFB416-8137

他已通過二級學科(數學和英語)屬於特殊ID爲A1EBF3CB-E899

將查詢知道如果傳遞的對象屬於選擇專業由學生?

計算具有相同SubjectSpecialtyID的主題數量爲SpecialtyChosenID,反之亦然。

非常感謝

+3

這看起來很像用於演示CS課程中的4NF/5NF數據庫問題的示例。如果這是作業,請將其標記爲這樣。 – ConcernedOfTunbridgeWells 2011-12-20 13:30:03

+0

不,它不是作業,學生和科目是我可以選擇汽車或書籍的一個例子。加上不知道CS課程是什麼。 – user974417 2011-12-20 15:25:59

回答

0

你可以做一個自連接。這可以找到學生選擇的與學生選擇的專業相匹配的科目數量。

SELECT l.SpecialtyChosenID, l.StudentID, Count(Distinct r.Subject) FROM Students l 
LEFT JOIN Students r ON (l.StudentID=r.StudentID AND l.SpecialityChosenID=r.SubjectSpecialityID) 
GROUP BY l.SpecialtyChosenID, l.StudentID 

但是,使用給定的表結構這是非常低效的。如果您有一張表格,列出學生的專業,另一個表格包含科目和專業,第三個表格將學生與科目聯繫起來,那麼最好從基礎數據構建此查詢,而不是派生數據。

+0

非常感謝,它激勵了我! – user974417 2011-12-20 15:30:59

0
SELECT * FROM Students WHERE SpecialtyChosenID = SubjectSpecialtyID 
0

如果您只需要匹配對象的列表,你有你SpecialtyChosenID可以這樣做

SELECT * FROM Students 
WHERE SubjectSpecialtyID = SpecialityChosenID 
0
CASE WHEN SpecialtyChosenID = SubjectSpecialtyID THEN 1 ELSE 0 END AS specialty 
相關問題