SQL Server查询以了解列中的id是否等于另一列中的其他id
我已经花了好几个小时试图建立这个查询,我需要你的帮助,这样我才能做到。 这是表SQL Server查询以了解列中的id是否等于另一列中的其他id,sql,sql-server-2008,Sql,Sql Server 2008,我已经花了好几个小时试图建立这个查询,我需要你的帮助,这样我才能做到。 这是表学生(由内部联接组成): 其中的信息表示id号为15的学生选择了id号为5ABFB416-8137的专业 他通过的两门课程(数学和英语)属于id为A1EBF3CB-E899的专业 如果通过考试的科目属于学生选择的专业,那么问题是什么 计算与SpecialtyChosenID具有相同SubjectSpecialtyID的受试者人数,反之亦然 非常感谢如果您只需要匹配主题的列表,并且您有SpecialtyChosenID,
学生
(由内部联接组成):
其中的信息表示id号为15的学生选择了id号为5ABFB416-8137的专业
他通过的两门课程(数学和英语)属于id为A1EBF3CB-E899的专业
如果通过考试的科目属于学生选择的专业,那么问题是什么
计算与SpecialtyChosenID
具有相同SubjectSpecialtyID
的受试者人数,反之亦然
非常感谢如果您只需要匹配主题的列表,并且您有SpecialtyChosenID,您可以执行以下操作
SELECT * FROM Students WHERE SpecialtyChosenID = SubjectSpecialtyID
SELECT * FROM Students
WHERE SubjectSpecialtyID = SpecialityChosenID
您可以进行自连接。这将查找与学生选择的专业相匹配的学生所选科目的数量
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
但是,使用给定的表结构是非常低效的。如果您有一个表列出了学生及其专业,另一个表列出了科目和专业,第三个表列出了学生与科目的关系,那么最好从基础数据而不是派生数据构建此查询。这看起来很可疑,类似于用于演示CS课程中4NF/5NF数据库问题的示例。如果这是家庭作业,请将其标记为家庭作业。不,这不是家庭作业,学生和科目的事情就是一个例子,我可以选择汽车或书籍。加上不知道什么是CS课程。
CASE WHEN SpecialtyChosenID = SubjectSpecialtyID THEN 1 ELSE 0 END AS specialty
CASE WHEN SpecialtyChosenID = SubjectSpecialtyID THEN 1 ELSE 0 END AS specialty