MS-Access - 独特的记录

时间:2015-06-25 13:41:29

标签: database ms-access ms-access-2007

我有一个包含很多学生的数据集,每个学生都有自己的学号。每个学生都做过多次测验。他们经常不止一次做过测验。我可以很容易地找出每个学生已完成的测验总数,但我也想知道每个学生做了多少个不同的独特测验。例如,学生可能已经完成了6次测验,但他们只完成了3次独特的测验(也许他们每次都进行两次独特的测验)。我怎样才能在Access中执行此操作?

3 个答案:

答案 0 :(得分:0)

您希望在SQL查询中使用DISTINCT谓词。由于我不知道你的桌子是什么样的,我只想举个例子:

SELECT DISTINCT NAME_OF_QUIZ FROM MYTABLE WHERE STUDENTID=?

答案 1 :(得分:0)

SELECT DISTINCT tbl_Quizzes.Student, tbl_Quizzes.Quiz
FROM tbl_Quizzes;

或者进入查询设计窗口,右键单击它并选择属性,唯一值,是。

答案 2 :(得分:0)

表名和列名真的很有帮助,因此可以更轻松地将答案调整到您的确切设置。

为了这个例子,我们假设你有一个名为Table1的表,它有学生测验列,测验是名称(唯一标识符)所参加的测验。

用于获取学生所参加的独特测验计数的sql,如下所示:

Select a.Student, count(a.Quiz) as QuizCount
From (Select Distinct Student, Quiz from Table1) as a
Group by a.Student

在这种情况下,(Select Distinct Student, Quiz from Table1)称为子查询,这意味着它是查询中的查询。这个子查询的目的是得到一个结果表,然后你可以从中得到一个只有学生所做的独特测验的计数,这是由关键字Distinct完成的。

as aas QuizCount称为别名。表和列可以是别名的,并且通常用于诸如不必重复键入长表名,增加查询的可读性,命名聚合函数的结果列(例如count,avg,sum等)之类的目的。如果没有提供别名,则聚合函数的结果列名称类似于EXR1000。

最后,结果集中任何不是聚合函数结果的列(例如a.Student)都需要放在Group By语句中。

使用我们提供的表/列名编辑:版本:

Select b.StudentID, Count(b.QuizName) as TotalQuizCount, c.UniqueQuizCount
From [combine V2] as b
Inner Join (SELECT [a].StudentID, Count([a].QuizName) as UniqueQuizCount
from (SELECT Distinct StudentID, QuizName
FROM [combine V2] ) as a 
Group By a.StudentID) as c ON b.StudentID = c.StudentID
Group By b.StudentID, UniqueQuizCount