2015-06-25 179 views
0

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

+0

谢谢您的意见。为了更清楚一点,我想在左栏中显示所有学生ID,并完成第2和第3栏中完成的测验次数和独特的测验(即,我不打算为一个特定的学生ID) – Paul

+0

我添加了一个编辑到我的答案,使用您的列和表名称,并具有所有3个请求的列。 – Bryan

回答

0

这将真正有助于获得表名和列名,这样可以更轻松地对答案进行罚款调整。

对于这个例子的目的,我们将假定你有一台,调用Table,它有已采取的测验列学生测验,测验是名称(唯一标识符)。

一个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 
+0

谢谢你的回复。我的表名是:combine v2。我的列名是:StudentID和QuizName。如上所述:我想在左列中显示所有学生ID,并在第2和第3列中完成测验的次数和完成的独特测验(即,我不打算为某个特定项目提供数据学生证) – Paul

+0

哇布赖恩!这就像一个魅力。谢谢你,谢谢你,谢谢你! – Paul

0

您想在SQL查询中使用DISTINCT谓词。因为我不知道你的表是什么样子,我只是想给你一个例子:

SELECT DISTINCT NAME_OF_QUIZ FROM MYTABLE WHERE STUDENTID=? 
0
SELECT DISTINCT tbl_Quizzes.Student, tbl_Quizzes.Quiz 
FROM tbl_Quizzes; 

或进入查询设计窗口中,右键单击它并选择属性,独特值,是的。