ms访问计数某列中某个值的出现次数,该值按另一列中的值分组

时间:2018-10-18 15:45:52

标签: sql ms-access select

我正在更新一个大型现有项目,该项目主要是使用Access中的宏编辑器创建的。如果我必须将其转换为vba并使用SQl,我对此持开放态度,但如果可能的话,我想坚持尽可能地保持现有结构。 有一系列的Select查询。一个主查询调用其他查询以提取一些数据。我认为这些都是无关紧要的,可以用列的字段中的正确表达式替换

这是我要从中提取的表类型的示例

Table: Students
ID | Class   | Status
1  | English | Enrolled
2  | Math    | Enrolled
3  | English | Dropped
4  | History | Enrolled
5  | English | Dropped
6  | English | Dropped
7  | Math    | Dropped

我希望选择查询显示的是

Select Query: Class Report
    Class   | Enrolled | Dropped
    English |    1     |   3
    Math    |    1     |   1
    History |    1     |   0

我遇到的问题是,在查询中显示时,“已注册列”中的表达式会将计数从“学生”表中仅隔离到特定班级。 我为“已注册”尝试过的表达式是:

Enrolled: DCount("Students", "Status", "Status = 'Enrolled'")

这将输出所有一般注册学生的总数。我不知道DCOUNT是否可以仅选择特定班级的注册学生

我摆弄了Count()函数,但是我想我只是缺少对该字段期望值的理解,因为它根本没有用。 再次,如果我必须转到VBA,我会尝试,但我想尝试在该领域解决这个问题。任何帮助将不胜感激:)

编辑 这是我的“设计”视图现在的样子,其中包含答案建议之一 enter image description here

按预期工作!

1 个答案:

答案 0 :(得分:2)

您可以进行条件聚合:

select class, 
       sum(iif(Status = 'Enrolled', 1, 0)) as Enrolled,
       sum(iif(Status = 'Dropped', 1, 0)) as Dropped
from Students s
group by class;