需要访问过滤器

时间:2011-07-04 17:53:01

标签: ms-access ms-access-2007

这是一个示例数据集

-----------------------------------------------------------------------------------------
id   nameid   name        score         diff          include     quantity     grade
---------------------------------------------------------------------------------------

7     0002     MO          10            0                0          25          3
8     0002     MO          18            0                1          25          3
9     0002     MO          20            0                0          25          3
10    0002     MO          14            0                0          17          6
11    0002     MO          100           0                0          17          6
11    0002     MO          100           0                0          17          6

12    0003     MA          10            0                0          12          3 
13    0003     MA          18            0                0          12          3
14    0003     MA          20            0                0          12          3
15    0003     MA          14            0                0          25          6
16    0003     MA          100           0                1          25          6
17    0003     MA          100           0                0          25          6

12    0004     MB          10            0                0          12          3
13    0004     MB          18            0                1          12          3
14    0004     MB          20            0                0          12          3 
15    0004     MB          14            0                0          07          6
16    0004     MB          100           0                1          07          6
17    0004     MB          100           0                0          07          6

我有一个返回上表的查询。 请注意,在每组六个中,至少有一行在1列中具有值include。 请看ref:access query needed但不需要。

同样对于每组六人,有三行grade = 3和三行grade = 6。 同时,grade 3grade 6在该组中具有相同的数量。

我想要做的是过滤掉少于15个数量的所有行。 但是,我仍然希望将它们分组为6.

我想删除同时为3级和6级都有quantity < 15的“群组”。来自上述数据集 我想得到以下结果:

-----------------------------------------------------------------------------------------
id   nameid   name        score         diff          include     quantity     grade
---------------------------------------------------------------------------------------

7     0002     MO          10            0                0          25          3
8     0002     MO          18            0                1          25          3
9     0002     MO          20            0                0          25          3
10    0002     MO          14            0                0          17          6
11    0002     MO          100           0                0          17          6
11    0002     MO          100           0                0          17          6

12    0003     MA          10            0                0          12          3 
13    0003     MA          18            0                0          12          3
14    0003     MA          20            0                0          12          3
15    0003     MA          14            0                0          25          6
16    0003     MA          100           0                1          25          6
17    0003     MA          100           0                0          25          6

所以基本上如果一个六人小组在任何一行中有include = 1,并且3级或6级quantity > 15那么我想要整个小组。

1 个答案:

答案 0 :(得分:1)

所以基本上如果一个六人小组在任何一行中包含= 1,并且3级或6级数量> 15,那么我想要整个小组。

我猜这个查询将识别候选名称组:

SELECT DISTINCT nameid
FROM YourTable
WHERE
    include = 1
    AND quantity > 15
    AND (grade = 3 OR grade = 6);

如果我猜对了,您可以将其保存为单独的查询,或将其用作子查询,并将其连接到YourTable,以将返回的行限制为只有nameid符合条件的行。它可能看起来接近这个未经测试的SELECT语句:

SELECT y.id, y.nameid, y.[name], y.score, y.diff, y.include, y.quantity, y.grade
FROM
    YourTable AS y
    INNER JOIN [
        SELECT DISTINCT nameid
        FROM YourTable
        WHERE
            include = 1
            AND quantity > 15
            AND (grade = 3 OR grade = 6)
        ]. AS q
        ON y.nameid = q.nameid
ORDER BY y.nameid;

修改:如果您还没有索引,请在nameid上添加索引。