• 締切済み

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つのデータ全てが抽出されてしまいます。 どなたか解決策をご教示ください。

みんなの回答

  • ks0902
  • ベストアンサー率85% (6/7)
回答No.3

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)
回答No.2

#1です > パラメータの入力「T1.系列」が求められます。 > 何がまずかったのでしょうか? わかりません。 動作確認できたものをメモ帳に張り付けて、テーブル名部分を置換機能で置き換えただけです。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

テーブル名を「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.優先度;

100202xg
質問者

補足

>SELECT * FROM TblA >WHERE 優先度 = (SELECT TOP 1 優先度 FROM TblA AS T1 WHERE T1.>系列 = TblA.系列 ORDER BY 優先度 DESC) これを入力すると、 パラメータの入力「T1.系列」が求められます。 何がまずかったのでしょうか?

関連するQ&A