Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server查询以了解列中的id是否等于另一列中的其他id_Sql_Sql Server 2008 - Fatal编程技术网

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