OSはWin98SE
Access2000です。
多分簡単なことなのかもしれないのですが、追加クエリの抽出条件を使って、
その列(更新回数)でいちばん大きな数字のみ別テーブルに抽出(追加)させたいのですがその式がわからず悩んでいます。

例(主キーなし)
店番号|商品番号|更新回数|金額|・・・
001 |A021  |  2 |300 |・・・
002 |A034  |  1 |200 |・・・
001 |A122  |  1 |150 |・・・
001 |A043  |  3 |500 |・・・

上記で店番号001が3データ入っている中の更新回数が3のデータのみ別のテーブルに追加したいのですが、最大を求めるのでMaxやDMaxを使用したらよいのかな?などと思ったのですが、その先の式の書き方がわからないのでどなたか教えていただけませんか。
どうぞよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

三度storkです。



蛇足ですが、先ほどの回答は、SQLを直書きするものだったんで、練習用にGUIでの操作で最新データの取り出し方を補足しておきます。

from句に入っているSQLをクエリとして保存してください。
クエリ名は、[最新データ]
-------------------------------------------
select 店番号,max(更新回数) as max更新回数
from [PC売上_T] group by 店番号
-------------------------------------------
どんなクエリになっているかは、デザインビューとデータシートビューで確認してください。

もうひとつクエリを作ります。
デザインビューで[PC売上_T]とさっき作った[最新データ]を追加して、店番号で結合し、さらに更新回数で結合します。結合線がふたつ出来ます。

これで最新のデータのみを抽出するクエリの出来上がりです。

この二つのクエリを一回で済ませると、#1のSQLになります。クエリを二つに分けていると誤ってクエリ[最新データ]を削除すると動作しなくなるので、出来るだけひとつにしましょう。
    • good
    • 0
この回答へのお礼

storkさん回答ありがとうございます。
また、質問しておきながらお返事が遅くなりまして申し訳ありません。
直書きのSQLは、まだみて理解できるところまで行っていないので
勉強して行きたいと思っています。
補足でいただいたGUIでの操作ありがとうございます。
これなら私にもわかりそうです早速試してみます。
昨日に続き今日も外出になりそうですのでこの質問は一度閉じさせていただきます。
もし、実行してみてわからないときは、また質問させてください。
そのときはどうぞよろしくお願いいたします。
本当に勉強になりますありがとうございました。

お礼日時:2001/10/31 11:41

似たような質問だと思ったら同じ方でしたか、失礼しました。



>SQL中のtable1やtable2は指定するテーブル名を指定し
>たら良かったでしょうか。
回答#1のSQLはひとつのテーブルを切り口を変えて自己結合しています。
table1はテーブル名で、table2はtable1を元にしたクエリに別名(仮の名前)をつけているだけなんで、何でもいいです。

補足の内容からいくとtable1は[PC売上_T]ですかね。

>教えていただいたSQLはどこの部分に追加したらよいので>しょうか。
[PC売上_T]が履歴形式のトランザクションで、[PC売上_M]が最新情報のマスタですね。

from句以下を
-----------------------------------------------
from [PC売上_T]
   inner join
   (select 店番号,max(更新回数) as max更新回数
    from [PC売上_T] group by 店番号 ) as 最新データ
   on ([PC売上_T].店番号 = 最新データ.店番号)
   and ([PC売上_T].更新回数 = 最新データ.max更新回数)
------------------------------------------------
※別名が[table2]だと分かりにくいので[最新データ]としました。

ただ追加するだけだと、前の質問(http://www.okweb.ne.jp/kotaeru.php3?q=155505)と同じ問題が発生すると思われますので、何らかの方法で回避してください。(分からなければ補足してください。)
    • good
    • 0

過去ログに同じ問題があるのでそれの応用だと思います。



店番号+更新回数でユニークになりますね。

select *
from table1 inner join (select 店番号,max(更新回数) as max更新回数 from table1 group by 店番号)as table2) on (table1.店番号=table2.店番号) and (table1.更新回数=table2.max更新回数)

この回答への補足

storkさんたびたびありがとうございます。
また、返事が遅くなりすみません。
昨日回答いただいてから色々とやってみたのですが、私のSQL知識不足でうまくいきませんでした。
すみませんが少し質問させてください。
SQL中のtable1やtable2は指定するテーブル名を指定したら良かったでしょうか。

それと追加クエリで現在
INSERT INTO PC売上_M(店番号,商品番号,更新回数,金額・・・)
SELECT [PC売上_T].[店番号],[PC売上_T].[商品番号],[PC売上_T].[更新回数],[PC売上_T].[金額]・・・
FROM PC売上_T;
のような感じであるのですが、教えていただいたSQLはどこの部分に追加したらよいのでしょうか。
お手数ですがどうぞよろしくお願いします。

補足日時:2001/10/30 09:50
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QphpMyAdminでのフィールド削除(クエリ実行)

本当にMySQL初心者なので基本的にコマンドが理解できないのですが、phpMyAdminにてデータベースを管理していますが、一つのテーブルに数千のデータが入っており、例えばID番号1から500までを一気に削除したいと言うときに、最初はローカルにCSVデータをエキスポートして編集した後インポートさせようとしたのですが、文字コードの関係でエラーになってしまい、解決策はクエリでデータを削除するしかないとの結論になりました。
例えばテーブルを指定してからクエリのウィンドウを開くとSELECT * FROM `テーブル名` WHERE 1
とすでに入力されているのですが、これをどのように書き換えれば複数のフィールドをいっぺんに削除できるのでしょうか?
非常に困ってます、アドバイスよろしくお願いします

Aベストアンサー

普通にクエリを書いて実行してください

DELETE FROM `テーブル名` WHERE `ID` BETWEEN 1 AND 500;

Qあるテーブルをそっくり別のテーブルに追加

あるテーブルのレコードをそっくり別のテーブルに追加するSQLを教えていただけないでしょうか。

#フィールド名等はまったく同じです。

windows2000
access2000
です。

Aベストアンサー

INSERT INTO 追加先 SELECT * FROM 追加元;
とか。

Qアクセスの削除クエリでいいのでしょうか?

 データベースで検索できるようにしたいのですが・・・・。クエリの検索結果をフォームに反映させています。
 検索結果表示後、もう一度検索フォームに戻り、検索をかけたときヒットするデータがないにも関わらず前回の検索結果が表示されたままになってしまいます。
削除クエリを使用すればいいのでしょうか?
 また削除クエリをどのように設定したらいいのでしょうか?(たとえば抽出条件が必要なのでしょうか?)
 この場合、マクロはいったん削除クエリを開き、もう一度クエリを開く設定でいいのでしょうか?分かりにくい質問ですいませんが教えてください

Aベストアンサー

はい、フォームのもとになっているクエリのデータが変わっても、更新行為をしないと反映されません。
具体的には、更新したいフォームに、コマンドボタンウイザードでフォーム→再表示を選択し、「再表示」ボタンを作ってみてください。押すとほら、更新されました。ボタン押し下げ動作を省略したい場合は、たとえば検索画面に戻るボタンがあるとしたら、そのボタンのクリック時イベントに、再表示ボタン内の主要ソースを貼り付ければ用を成すはずです。
但し、サブフォームをご利用の場合など、この方法がふさわしくない場合もあります。
確実に更新するには該当のフォームを閉じて開きなおすことです。マクロを作ってボタン化すれば少々画面がちらつくだけでそう不自然ではありません。
お試し下さい。

Qあるテーブルの内容を基準にして違うテーブルを更新するSQL文

教えて下さい。

あるテーブルに下記の内容があります。
ID│名称
─┼───
1│花
2│木
3│水

もうひとつのテーブルには、
ID│名称
─┼───
1│海
3│水
4│空
となっています。
最初のテーブルの全レコードを対象に、最初のテーブルのIDと同じ値がもうひとつの
テーブルにある場合、もうひとつのテーブルをUPDATEし、存在しなければINSERTしたい
です。
結果を
ID│名称
─┼───
1|花
2│木
3│水
4│空
を期待しています。

このようにするSQL文を教えていただけませんでしょうか。
よろしくお願いします。

Aベストアンサー

良く似た質問が過去に有りました。
回答2がぴったりだと思います。
参考にしてください。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=604829

Qテーブル削除クエリ

テーブル作成クエリはあるけどテーブル削除クエリはないのでしょうか?
ADOXで削除するしかないですか?

Aベストアンサー

クエリーのSQLビューで、下記の様なSQLを入力して保存すると、一種のテーブル削除クエリができますね。
DROP TABLE Table1;
データベースウィンドウで右クリックする方が早そうな...
VBAからなら、下記で実行できました。ご参考まで。
Sub Sample()
DoCmd.SetWarnings False
DoCmd.OpenQuery "Q_Table1削除"
DoCmd.SetWarnings True
End Sub

QMs Access テーブルBにテーブルAのCDを充てたい。(クエリ?紐づけ?リレーションシップ?)

初心者です。よろしくお願いします。
そもそも、できるのかどうか、できたとして、どうするのかがわからないです。

次の2つのテーブルがあります。
テーブルマスタA には、①市町村CD ②市町村名 ③住所(番地なし)
テーブル受付データB には、①NO ②住所(番地まであり)③受付日 ④⑤・・・

具体的には、以下のとおり。(サンプル)
テーブルマスタA
①    ②      ③
10000  松戸市    千葉県松戸市
20000  鎌ケ谷市本町 千葉県鎌ケ谷市本町
30000  横須賀市   神奈川県横須賀市
テーブル受付データB
①    ②
1    千葉県松戸市五香5-5-5    
2    千葉県鎌ケ谷市本町さくらがおか8-88-8 ひまわりアパート302
3    神奈川県横須賀市横須賀8-7-8   

テーブル受付データBにおいて、②の部分(市町名まで)と、
テーブルマスタAの③をなんとか紐づけて、

クエリで合体させたい。
=テーブル受付データBに、テーブルマスタAの市町村CDを充てたい。
A①市町村CD  A②市町村名 B② B③ B④ B⑤
とすることを切望しています。

***********
たとえば、2つのテーブルに同じフィールドがあって、
それをリレーションシップで紐づけるのは容易ですが、
今回のようなパターンは、
もしかして、私は、ナンセンスなことをしようと苦闘している?と思ってきました。
フィールド名が同じじゃないのに、それを紐づけることができるのでしょうか?

できるとして、どのようにすればよいのでしょうか?

どうぞ、教えていただきたく、お願いいたします!!!

初心者です。よろしくお願いします。
そもそも、できるのかどうか、できたとして、どうするのかがわからないです。

次の2つのテーブルがあります。
テーブルマスタA には、①市町村CD ②市町村名 ③住所(番地なし)
テーブル受付データB には、①NO ②住所(番地まであり)③受付日 ④⑤・・・

具体的には、以下のとおり。(サンプル)
テーブルマスタA
①    ②      ③
10000  松戸市    千葉県松戸市
20000  鎌ケ谷市本町 千葉県鎌ケ谷市本町
30000  横須賀市   神奈川県横...続きを読む

Aベストアンサー

パラメータが表示されたのは指定したフィールドがないからです。
テーブル名とフィールド名を使用している名前に変更してください。

InStr関数は
ある文字列 (string1) の中から指定された文字列 (string2) を検索し、最初に見つかった文字位置を返す文字列処理関数です。
InStr(string1, string2)

やっていることはテーブル受付データBの②(住所)の中からテーブルマスタAの③(住所)を検索し
文字列がある位置を出しています。
必要なのは文字列が含まれているデータのみなので条件を>0としています。

試しにInStrの部分をなくしてクエリを実行してみてください。
「テーブルマスタA」のレコード数*「テーブル受付データB」のレコード数のデータが表示されるはずです。

QAccessの削除クエリについて

『先月分のデータを全て削除』という削除クエリを作りたいのです。
本を見ても、
『指定した日の○日前の分までのデータを削除する』はあるのですが・・・・。

例えば、
5月5日にクエリを実行しても、5月10日にクエリを実行しても、4月30日以前のデータが削除されて欲しいのですが。
よろしくお願いいたします。

Aベストアンサー

>『先月分のデータを全て削除』
ということであれば下記条件で削除クエリを作成
すればできます。
---
フィールド:式:Month([対象日付フィールド])
抽出条件:Month(DateAdd("m",-1,Now()))

QACCESSクエリで複数テーブルの抽出方法

#1583217にて質問させていただいたものです。
私の早とちりで質問を締め切りさせていただいたのですが、クエリが要求通りに出てくれません。
再度、質問させて下さい。

現在、ACCESS2000で2つのテーブルの値を表示するクエリを作成中です。
テーブルは外部データよりインポートしています。

Aテーブル
KEY1 | KEY2 | 値1
--------------------------
00000001 | AAAAAAAA | 100
00000001 | BBBBBBBB | 200
00000002 | AAAAAAAA | 1000

Bテーブル
KEY1 | KEY2 | 値1
--------------------------
00000001 | AAAAAAAA | 500
00000002 | BBBBBBBB | 300


これを、
KEY1 | KEY2 | 値1
----------------------------------------
NULL:00000002 | NULL:BBBBBBBB | NULL:300

と表示したいのです。(Bテーブルにあるデータのみを表示)

どなかた教えてください。お願いします。

#1583217にて質問させていただいたものです。
私の早とちりで質問を締め切りさせていただいたのですが、クエリが要求通りに出てくれません。
再度、質問させて下さい。

現在、ACCESS2000で2つのテーブルの値を表示するクエリを作成中です。
テーブルは外部データよりインポートしています。

Aテーブル
KEY1 | KEY2 | 値1
--------------------------
00000001 | AAAAAAAA | 100
00000001 | BBBBBBBB | 200
00000002 | AAAAAAAA | 1000

Bテーブル
KEY1 | KEY2 | 値1
-----...続きを読む

Aベストアンサー

とりあえず、「Null」の表示がなくても良いなら:
SELECT Bテーブル.Key1, Bテーブル.Key2, Bテーブル.値1
FROM Aテーブル RIGHT JOIN Bテーブル ON (Aテーブル.Key1 = Bテーブル.Key1) AND (Aテーブル.Key2 = Bテーブル.Key2)
WHERE (((Aテーブル.Key1) Is Null) AND ((Aテーブル.Key2) Is Null));


あくまで「Null:」を表示したいのであれば:
SELECT "Null:" & [Bテーブル]![Key1] AS Key1連結, "Null:" & [Bテーブル]![Key2] AS Key2連結, "Null:" & [Bテーブル]![値1] AS 値連結
FROM Aテーブル RIGHT JOIN Bテーブル ON (Aテーブル.Key1 = Bテーブル.Key1) AND (Aテーブル.Key2 = Bテーブル.Key2)
WHERE (((Aテーブル.Key1) Is Null) AND ((Aテーブル.Key2) Is Null));

といったところでいかがでしょうか?
(2番目の方、クエリの構造的に「Aテーブルにないもの→Null」しかないので、テキストで「Null:」表示としています)

とりあえず、「Null」の表示がなくても良いなら:
SELECT Bテーブル.Key1, Bテーブル.Key2, Bテーブル.値1
FROM Aテーブル RIGHT JOIN Bテーブル ON (Aテーブル.Key1 = Bテーブル.Key1) AND (Aテーブル.Key2 = Bテーブル.Key2)
WHERE (((Aテーブル.Key1) Is Null) AND ((Aテーブル.Key2) Is Null));


あくまで「Null:」を表示したいのであれば:
SELECT "Null:" & [Bテーブル]![Key1] AS Key1連結, "Null:" & [Bテーブル]![Key2] AS Key2連結, "Null:" & [Bテーブル]![値1] AS 値連結
FROM Aテーブル RI...続きを読む

Qアクセスのクエリでレコード削除ができません。

アクセス超初心者です。

テーブルを商品コードでくっつけて、クエリのデザインビューで表示しました。

いらないレコードを削除しようとしたところ、できません。

くっつける前の、テーブルではできますが、クエリで実行させ、レコードを削除しようとしたところできません。

どうしたらよいのか教えてください。

あと、もうひとつ、クエリで、出力したいフィールド名をドラッグしたあと、削除したいときには、どうすればよいでしょうか?

表示しないなら、できるのですが・・・。削除がわかりません。

よろしくお願いいたします。

Aベストアンサー

二つのテーブル構造が不明
クエリのSQL文も不明
サンプルデータ

以上三点が分からないと回答のしようもありません。
SQL文はクエリをデザインビューで開いて
その上で右クリックすると現れるコンテキストメニューに
SQLビュー が有りますので切り替えると
SELECT ・・・・ てのが有りますのでコピーして此処に貼り付けできます。

クエリはSQL文を分かりやすいように作られたモノで実体はSQL文です。
掲示板ではこのSQL文でやり取りをします。
さて、なぜ削除できないかというと、そのように作ってしまっているからです。
このリンク先の説明を理解すれば原因が突き止められます。
クエリのデータを編集できない状況
http://office.microsoft.com/ja-jp/access-help/HA010097876.aspx

フィールドの削除は、Access2010の場合なら
リボンの中に「列の削除」が有ります。
または、フィールド名の少し上にマウスカーソルを持って行くと
下向きの太い矢印になるのでクリック、列全体が反転しますので Deleteキーで削除
なお、次回からはAccessのバージョンも明記しましょう。

二つのテーブル構造が不明
クエリのSQL文も不明
サンプルデータ

以上三点が分からないと回答のしようもありません。
SQL文はクエリをデザインビューで開いて
その上で右クリックすると現れるコンテキストメニューに
SQLビュー が有りますので切り替えると
SELECT ・・・・ てのが有りますのでコピーして此処に貼り付けできます。

クエリはSQL文を分かりやすいように作られたモノで実体はSQL文です。
掲示板ではこのSQL文でやり取りをします。
さて、なぜ削除できないかというと、そのように作ってしまっているか...続きを読む

Q追加質問-アクセス2003 一部語句にて抽出

先ほど解決した件の更に追加質問です。
(同期代理依頼です)

A.フォームのTextBoxにその語句を含むレコードを
 抽出する場合、どのような方法があるのでしょう?
 コマンドボタンのプロパティでマクロのアクション
 を、フィルターの実行を指定し、Where条件式を
 入力すれば実行出来るのでしょうか?
Q.Where条件式は、
 [Field名] Like "*" & [Forms]![Form名]![TextBox名] & "*"

追加質問:上記内容でコンボボックスの場合は同様の式では出来ないのでしょうか?違った式になるのでしょうか?
ちなみに社内書庫管理の分類・所在検索の為のものだそうです。
宜しくお願いします。

Aベストアンサー

試してみれば、すぐわかることですが、
同様の式では出来ます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報