这是一个示例数据集
-----------------------------------------------------------------------------------------
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 3
和grade 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
那么我想要整个小组。
答案 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上添加索引。