2012-01-19 54 views
0

我有一個包含每個實體(一對多)多個值的列(字段)。如何在MS Access中使用Having Clause來獲取MAX值

示例:記錄可以引用此列中的多個值。

我想要做的是隻獲得記錄,其中最高(MAX)值在這個列是等於零。

我做的第一件事是將列中的值轉換爲Integer,這樣我就可以獲得最大值。

這是我的代碼:

如何獲得最大代碼?如果一個記錄有多個代碼。我只想用最大或最高代碼00000來記錄。

由於我無法在Where子句中使用Aggregate,因此我收到Having子句的錯誤。

SELECT CUSTOMER.USER_ID, MAX(CInt(CUSTOMER.REC_CODE)) AS ACTIVE_REC_CODE, 
CUSTOMER.CUS_TYPE 


FROM CUSTOMER 


WHERE ((CUSTOMER.REC_CODE) IS NOT NULL) 


GROUP BY 

CUSTOMER.USER_ID, CUSTOMER.REC_CODE, CUSTOMER.CUS_TYPE 


HAVING MAX(CInt([CUSTOMER.REC_CODE])= 00000) 
+1

我很困惑,爲什麼現有的選擇最大不適合你? – Fionnuala

+0

因爲我不確定查詢的結果集是否準確。 – Asynchronous

+0

你說00000,11111,22222,333333,但是00000是這個列表的MIN。你想要MAX還是MIN? – Fionnuala

回答

3

你是接近的,但你需要從WHERE刪除CUSTOMER.REC_CODE,因爲你希望該列的最大值。這應該工作:

SELECT CUSTOMER.USER_ID, MAX(CInt(CUSTOMER.REC_CODE)) AS ACTIVE_REC_CODE, CUSTOMER.CUS_TYPE 
FROM CUSTOMER 
WHERE CUSTOMER.REC_CODE IS NOT NULL 
GROUP BY CUSTOMER.USER_ID, CUSTOMER.CUS_TYPE 
HAVING MAX(CInt([CUSTOMER.REC_CODE])) = 0 
+0

我試過了,我不確定它在工作。只是爲了確認,我想問一下:如果一條記錄的REC_CODE如下:00000,11111,22222,33333和另一個REC_CODE只有00000以上的查詢會給我兩條記錄還是隻有第二條記錄? – Asynchronous

+0

我覺得你很困惑,因爲你想要的。我寫的查詢將返回所有'USER_ID'和'CUS_TYPE',其最大值爲'REC_CODE'爲00000. – Lamak

+0

@UnaverageGuy:此查詢僅返回第二行作爲示例。基本上,如果你在'REC_CODE'中沒有NULL,也沒有值爲負整數,這個解決方案應該足夠你(我認爲)。 –