2011-12-20 94 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 
相关问题