- 締切済み
ACCESS2000でのレコード抽出
OS:WindowsXP ACCESS2000 あるフィールドの値が最大となるようなレコードを選択クエリで 抽出しようとしているのですがうまくいきません。 テーブルのフィールドは4個あります。 テーブル [系列] [優先度] [データ1] [データ2] ここで各系列ごとに優先度が最大となるレコードのみを 抽出したいのです。 系列、データ1、データ2は重複がありえます。 優先度は系列を跨いだ重複はありますが、 同系列内での重複はありません。 レコードの例) 1:系列A 優先度1 データA データB 2:系列A 優先度2 データC データD 3:系列B 優先度1 データE データF 上記の例で言いますと、レコード2:とレコード3:のみを 抽出するクエリを作成したいのです。 集計クエリで優先度のフィールドを「最大」にしても、 3つのデータ全てが抽出されてしまいます。 どなたか解決策をご教示ください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- ks0902
- ベストアンサー率85% (6/7)
ACCESS2000はよく知らないですが・・・ これでどうですか? select 系列, 優先度, データ1, データ2 from テーブル A where exists (select * from テーブル B where B.系列 = A.系列 group by B.系列 having A.優先度 = max(B.優先度) );
- 30246kiku
- ベストアンサー率73% (370/504)
#1です > パラメータの入力「T1.系列」が求められます。 > 何がまずかったのでしょうか? わかりません。 動作確認できたものをメモ帳に張り付けて、テーブル名部分を置換機能で置き換えただけです。
- 30246kiku
- ベストアンサー率73% (370/504)
テーブル名を「TblA」と仮定した時 以下の内容を、クエリのSQLビューに記述してみてください。 SELECT * FROM TblA WHERE 優先度 = (SELECT TOP 1 優先度 FROM TblA AS T1 WHERE T1.系列 = TblA.系列 ORDER BY 優先度 DESC) ; ※ TblA の記述は、3か所あります 表示だけでよければ以下の様な記述もできると思います。(修正はできません) SELECT TblA.* FROM TblA INNER JOIN (SELECT 系列, Max(TblA.優先度) AS 優先度 FROM TblA GROUP BY 系列) AS T1 ON T1.系列 = TblA.系列 AND T1.優先度 = TblA.優先度;
補足
>SELECT * FROM TblA >WHERE 優先度 = (SELECT TOP 1 優先度 FROM TblA AS T1 WHERE T1.>系列 = TblA.系列 ORDER BY 優先度 DESC) これを入力すると、 パラメータの入力「T1.系列」が求められます。 何がまずかったのでしょうか?