2015-07-09 189 views
0

我有一个名为qryA380的MS Access查询,它使用多个INNER JOIN来连接几个表。 运行查询将显示的结果是这样的:选择最大值的行

+----+-----------+----------+------------+ 
| ID | Aircraft | Route.ID | Passengers | 
+----+-----------+----------+------------+ 
| 23 | A-380 | 1  |  556 | 
| 2 | A-380 | 2  |  652 | 
| 54 | A-380 | 2  |  489 | 
| 16 | A-380 | 1  |  598 | 
| 39 | A-380 | 1  |  627 | 
| 45 | A-380 | 3  |  392 | 
| 74 | A-380 | 3  |  726 | 
+----+-----------+----------+------------+ 

我的计划是选择最小Route.ID(在这种情况下,它是1),最终的结果应该是:

+----+-----------+----------+------------+ 
| ID | Aircraft | MinRoute | Passengers | 
+----+-----------+----------+------------+ 
| 23 | A-380 | 1  |  556 | 
| 16 | A-380 | 1  |  598 | 
| 39 | A-380 | 1  |  627 | 
+----+-----------+----------+------------+ 

我认为这将是直接简单的。为了节省时间,我创建第二个查询做这项工作:

SELECT [qryA380].ID, [qryA380].Aircraft, MIN([qryA380].Route.ID) AS MinRoute, [qryA380].Passengers 
FROM [qryA380] 
GROUP BY [qryA380].ID, [qryA380].Aircraft, [qryA380].Passengers 

但我一直得到与qryA380产生的表的表相同。它的结果全部为Route.ID

+0

只是目测,因为乘客一共是独一无二的,当你包括在您的分组,您正在返回所有行。您需要从您的分组中排除乘客总数,以获得您想要的结果。 – rbroberg

+0

乘客专栏是我想要展示的。通过将它从分组中排除,我会得到一个错误,说“该查询不包含指定表达式'乘客'作为聚合函数的一部分。” – RRWW

回答

0

乘客和身份证明栏应该被排除,因为他们有独特的价值观。通过使用子查询,我现在能产生预期的效果:

SELECT [qryA380].* 
FROM (
    SELECT MIN([qryA380].Route.ID) AS MinRoute 
    FROM [qryA380] 
) tblMinRoute 
INNER JOIN [qryA380] 
ON [qryA380].Route.ID = tblMinRoute.MinRoute 
0

试试这个

SELECT [qryA380].* 
    FROM [qryA380] 
    WHERE [qryA380].Route.ID = (
      SELECT min(Route.ID) 
      FROM [qryA380] 
      )