2012-01-19 7 views
0

各エンティティ(1対多)に複数の値を含む列(フィールド)があります。MS AccessでHaving句を使用してMAX値を取得する方法

例:レコードは、この列に複数の値を参照できます。

私がしたいのは、この列の最高(MAX)値がゼロに等しいレコードだけを取得することです。

最初に行ったことは、列の値をIntegerに変換することでした。この方法で最大値を取得できます。ここで

は私のコードです:

私はマックスコードを取得するにはどうすればよいですか?レコードに複数のコードがある場合。私は最高または最高のコード00000で記録したいだけです。

Where節で集計を使用できないため、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

私は混乱していますが、なぜ既存の選択Maxがあなたに適していないのですか? – Fionnuala

+0

クエリの結果セットが正確であるかどうかわからないためです。 – Asynchronous

+0

あなたは00000、11111、22222、33333と言っていますが、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しかありません。上記のクエリは、レコードか2番目のレコードだけですか? – Asynchronous

+0

あなたはあなたが望むものとして混乱していると思います。私が書いたクエリは、最大REC_CODEが00000の 'USER_ID'と' CUS_TYPE'をすべて返します。 – Lamak

+0

@UnaverageGuy:このクエリは、例の2番目の行だけを返します。基本的には、 'REC_CODE'にNULLがなく、負の整数に評価される値もない場合は、この解決策で十分です(私は思っています)。 –

関連する問題