2015-07-09 188 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] 
      )