- ベストアンサー
ACCESS2000です。
教えてください。 商品テーブルに以下のフィールドがあるとします。 商品コード、補助コード、入力日、原価 0010,001,20050901,1000 0010,005,20050902,1010 0010,008,20050907,0958 0020,100,20050901,0500 0020,010,20010905,0550 0100,100,20040501,1200 このテーブルから、商品コードごとに1件のレコード(例えば補助コードが最大のものとか入力日が最大のもの)を取得するクエリーはどのように作成すればよいでしょうか?
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
クエリにて 新しいフィールド aa:[補助コード] & [入力日] & [原価]を作成して、 商品コードでグループ化 aaの最大値を取って 補助コードの値として 補助CD:left([aa],3) 入力日の値として 入力日A:mid([aa],4,8) 原価の値として 原価A:right([aa],4) といったようにしてはいかがでしょう
その他の回答 (8)
- O_cyan
- ベストアンサー率59% (745/1260)
選択クエリを作りそのクエリを集計クエリにし商品コードをグループ化・補助コードを最大・入力日を最大・単価を最小とすれば 0010,001,20050901,1000 0010,005,20050902,1010 0010,008,20050907,0958 0020,100,20050901,0500 0020,010,20050905,0550 0100,100,20040501,1200 を 0010,008,20050907,0958 0020,100,20050905,0500 0100,100,20040501,1200 と表示できますよ。 SQLなら SELECT 商品テーブル.商品コード, Max(商品テーブル.補助コード) AS 補助コードの最大, Max(商品テーブル.入力日) AS 入力日の最大, Min(商品テーブル.単価) AS 単価の最小 FROM 商品テーブル GROUP BY 商品テーブル.商品コード; で出来ます。
- sanbit
- ベストアンサー率32% (16/50)
No5sanbitです。 ご質問の趣旨に合っていますか? この方法だと項目ごとに2個のクエリが必要ですね。 いい方法が思いつきません。 他にいい回答があればいいですね。
回答ではありませんが気がついたことがあるので少し書きます。勘違いがあったらご指摘ください。 どうも話が噛み合わないと思っていたのですが(おそらく質問者様のほうもそうでしょうが)、原因がわかりました。質問文のサンプルですが「0020,010,20010905,0550」になってますね。日付が2001年になってます。一方、質問者様の補足を見る限り、2001年の日付はありません。ということは、サンプルの方は2005年が正解ですか? 少し混乱してきたので、元のデータと結果のサンプルを再度補足していただけますか。それを見て、もう一度考えます。サンプルはもう少し長めでお願いします(同じ商品コードで3レコードくらい)。
- sanbit
- ベストアンサー率32% (16/50)
クエリを集計でグループ化し 商品コード:グループ 補助コード:最大とします。 次にこのクエリと商品テーブルで商品コードと補助コードゲでリンクしたクエリを作成します。 自信有りませんが間違ってましたらご容赦ください。
補足
なるべくひとつのクエリで実現したいと思うのですが、無理でしょうか?
#2の回答は、#1の補足の表が「補助コード=最大、入力日=最大、原価=最小」となっていたのでそのまま作ったんですが...。違います? > 入力日および原価は、最大、最小の指定をするのではなく表示させたいのですが可能ですか? ちょっと意味がわかりかねるんですが、何を表示させればいいんでしょうか。結果に出すのは、商品コード1種類につき1レコードでいいんですよね? でも、元のレコードは複数あるわけで、そのうちのどれを取ればいいんでしょう? 補足お願いします。 言葉で説明しづらかったら、もう少し長めのサンプルを書いてもらったほうがいいかもしれないです。元の表が結果こうなるみたいな感じで。
補足
補助コードが最大だからといって、入力日が最大とは限らず、原価が最小とは限らないということです。 #1の補足に書いたほしい結果は以下のとおりですが、 商品コード、補助コード、入力日、原価 0010,008,20050907,0958 0020,100,20050901,0500 0100,100,20040501,1200 入力日=最大、原価=最小の指定をすると、以下のようになりませんか? 商品コード、補助コード、入力日、原価 0010,008,20050907,0958 0020,100,20050905,0500 0100,100,20040501,1200
- mee42760
- ベストアンサー率40% (47/116)
補助コードフィールドの抽出条件欄に以下の構文を入力 (select max ( [補助コード] ) from [商品])
補足
この方法では最大の補助コード(例のテーブルだと100)を持ったレコードしか表示されないです。
1. 商品テーブルを元に選択クエリを作る 2. クエリをデザインビューで開く 3. メニューの「表示」-「集計」を選ぶ (ここで集計行が現れて、全部「グループ化」となっているはず) 4. 補助コードの集計行をクリック 5. コンボボックスから「最大」を選ぶ 6. 同じように、入力日を「最大」、原価を「最小」にする 以上で#1の補足の表はできるはずです。 (こういう意味とは違うかな...)
補足
入力日および原価は、最大、最小の指定をするのではなく表示させたいのですが可能ですか?
- mee42760
- ベストアンサー率40% (47/116)
選択クエリの作成ですね。 補助コード選択クエリの場合で説明します。 1.”ウィザードを使用してクエリを作成する。”でテーブルのすべての要素を選択してクエリを作成します。 作成したクエリを、デザインモードで開いて、補助コードフィールドの抽出条件欄に [補助コードを入力] と入力します。([ ]も入力です) これで、クエリを開くと、”補助コードを入力”とのダイアログが出ますので、そこに補助コードを入力すれば、該当するレコードが表示されます。 2.入力日クエリも、1.で作成したクエリをコピーして、([補助コードを入力]は削除します)入力日テーブルに、同様の作業を行えば作成できます。
補足
補助コードをパラメータ入力するのではなく、最大のものを自動判定でセレクトしたいのです。 (各商品コードごとに補助コードの最大値がわからないのでパラメータ入力もできないのです。) 作成したクエリを実行すると以下の結果が得られるようにしたいのです。 商品コード、補助コード、入力日、原価 0010,008,20050907,0958 0020,100,20050901,0500 0100,100,20040501,1200
補足
そうですね、テーブルのサンプルがあまりよくなく、補足#4はまちがってますね。 サンプルテーブルの5行目が 0020,010,20050905,0550 であった場合、 補足#4のようになりほしい結果ではないということです。