MS Access:根据其他字段显示整个组

时间:2016-09-21 16:54:36

标签: sql ms-access-2010

我想展示所有课程和成绩那些至少有一个" F"级。

这是源表:

ID  |  Students  |  Class  |  Grade  
1  |  Addams, W  |  History  |  A  
2  |  Addams, W  |  Biology  |  A  
3  |  Addams, W  |  French  |  B  
4  |  Jetson, E  |  Spanish  |  B  
5  |  Jetson, E  |  Geometry  |  B  
6  |  Jetson, E  |  Biology  |  F  
7  |  Rubble, B  |  English  |  F  
8  |  Rubble, B  |  Geometry  |  B         
9  |  Rubble, B  |  Biology  |  B  
10  |  Flintstone, P  |  Music  |  A  
11  |  Flintstone, P  |  Spanish  |  B

这是一份按学生分组的报告:

Addams, W  
    ---------------French    B  
    ---------------Biology    A  
    ---------------History     A  
Flintstone, P  
    ---------------Spanish   B  
    ---------------Music      A  
Jetson, E  
    ---------------Biology    F  
    ---------------Geometry  B  
    ---------------Spanish    B  
Rubble, B  
    ---------------Biology     B  
    ---------------Geometry  B  
    ---------------English     F  

同样,我想展示所有课程和成绩那些至少有一个" F"等级,如下所示:

Jetson, E  
    ---------------Biology    F  
    ---------------Geometry  B  
    ---------------Spanish    B  
Rubble, B  
    ---------------Biology     B  
    ---------------Geometry  B  
    ---------------English     F   

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

  1. 使用您的表作为源创建查询。放入第一列中的Students字段,并将以下公式放在第二列中:IIf([Grade] =“F”,1,0),然后保存查询。 (默认情况下,Access会将此列命名为“Expr1”,但您可以将其更改为您喜欢的任何内容)

  2. 使用查询1作为源创建第二个查询,从查询1中删除2列,分组,使用公式对列进行求和,并在此列中添加> = 1的条件,并且保存。你现在有一张桌子,只有至少有一个“F”的学生。 (通过将光标放在底部查询的网格部分,右键单击并从提示框中选择“总计”来分组)

  3. 通过将Students字段与1对1匹配(即连接类型1)连接,创建将第二个查询与原始源表绑定的第三个查询。

答案 1 :(得分:0)

您可以使用子查询查询您的表,以便在同一个表中查询具有F等级的任何实例:

SELECT a.ID, a.Students, a.Class, a.Grade
FROM yourtable AS a
WHERE EXISTS
(
SELECT '1'
FROM yourtable AS b
WHERE a.Students = b.Students
AND b.Grade = 'F'
);

接下来,根据上述查询确定报告。

答案 2 :(得分:0)

OP在这里:两个答案都有效;再次感谢。这是第二个答案的代码:

查询1 选择Students2.Students,IIf([等级] =" F",1,0)AS F_grade 来自Students2;

查询2 SELECT Query1.Students,Sum(Query1.F_grade)AS SumOfF_grade FROM Query1 GROUP BY Query1.Students HAVING(((Sum(Query1.F_grade))> = 1));

查询3 选择Students2.Students,Students2.Class,Students2.Grade FROM Students2 INNER JOIN Query2 ON Students2.Students = Query2.Students;