アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして。
アクセスを猛勉強中の初心者です。
過去記事を探しましたが、解決できませんでしたのでご教示お願いします。

やりたいことは、2つのテーブルからクエリを使って、最新のデータを抽出したいです。
ですが、その中に抽出したくないワードが存在します。
それ以外のワードで最新のデータを抽出したいです。

まず、下記のような2つのテーブルがあります。

●テーブル1       
・ID(主キー)      
・日付
・コメント
・顧客ID

●テーブル2
・顧客ID(主キー)
・顧客名
・住所

次にこのテーブルをクエリにしてデータを返すと、下記のようになります。

日付    コメント      顧客名   
・2/1     保留       Aさん
・2/1     発送       Bさん      
・2/1     相談       Cさん
・2/2    次回未定     Bさん
・2/3     発送       Aさん 
・2/4    次回未定     Dさん       

今回抽出したいデータは、「発送」というワードをはぶいた最新のデータをとりたいということです。
なので、データとしては、

日付    コメント      顧客名   
・2/1     保留       Aさん
・2/1     相談       Cさん
・2/2    次回未定     Bさん
・2/4    次回未定     Dさん

と、このように抽出したいのです。

最新データの抽出にはMax関数を使ってでき、いらないワードである「発送」はクエリのフィールドの抽出条件に『<>”発送”』と入力することで抽出を防ぐことができたのですが、これらの方法でMax関数を入れて最新データの抽出をしようとすると、全ての「発送」を除いたデータが抽出されるので、最新データに該当する顧客のデータが消えてしまいます。
なので、本来のコメントデータが分からない状態になります。

また、エクセル側でパラメータクエリを使って資料を作成し、アクセスに触ったことがない人たちが使用するので、アクセスを更新してといったことができません。
なので、更新クエリなどを使ってのやり方以外の方法はないでしょうか?

全くの初心者ですので、言葉足らずで説明が分かり辛くて申し訳ありません。
ご教示をお願いいたします。

A 回答 (8件)

> 「発送」というワードをはぶいた最新のデータをとりたい



> 全ての「発送」を除いたデータが抽出される

日本語的には、その処理で合ってるように思いますが?



とりあえず、すっごく簡単に考えてみませんか?
選択クエリをソースにして、選択クエリを作れるのはご存知ですよね?

なので、「発送以外」を抽出する選択クエリを作りましょ。
で、コレを基に「最新日」を抽出する選択クエリを作りましょ。


もちろん一発でもいけますが、初めの内は上記で十分ですよ。
難しいことは慣れてからで十分です。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。

言葉足らずでした。
「発送」というワードをはぶきたいのですが、それは最新の「発送」というワードだけはぶきたいのです。
Max関数と『<>"発送"』と抽出条件にいれてデータ化すると、データ上では別のコメント(発送ではないコメント)をいれたとしても、過去に「発送」がついた顧客の名前が消えてしまうので、できないのです。。
こんな説明でわかりますか…?

あと、すみません、初心者なもので選択クエリをソースにして、選択クエリを作るやり方がわかりません。
申し訳ありませんが、教えていただけますでしょうか?

お礼日時:2013/02/12 16:22

#3さんののお礼に書かれているものが、もう少し・・・・と思います。



テーブル1の名を「★」、テーブル2の名を「■」と仮定します。
SQLビューに以下を記述してどうなりますか。

SELECT Q1.日付, Q1.コメント, Q2.顧客名 FROM ★ AS Q1
INNER JOIN ■ AS Q2 ON Q1.顧客ID=Q2.顧客ID
WHERE Q1.日付 = (SELECT Max(日付) FROM ★ WHERE コメント<>'発送' AND 顧客ID=Q1.顧客ID);

やっている事は、★ と ■ を 顧客ID で結び付け、日付が
その 顧客ID の コメントが "発送" ではない日付の最大なら・・・・

Max を使うところの条件に コメント<>'発送' を指定すれば良さそう・・・・


解釈が間違ってましたらごめんなさい。
※ 処理性能はわかりません。
    • good
    • 0
この回答へのお礼

>SELECT Q1.日付, Q1.コメント, Q2.顧客名 FROM ★ AS Q1
INNER JOIN ■ AS Q2 ON Q1.顧客ID=Q2.顧客ID
WHERE Q1.日付 = (SELECT Max(日付) FROM ★ WHERE コメント<>'発送' AND 顧客ID=Q1.顧客ID);

こちらのSQLは以前にやってみたのですが、ダメでした。。

お礼日時:2013/02/14 15:43

何度も回答しますが。

他の回答者様が言うように

1. やりたいことがはっきりしない
2.ACCESSの用語が理解できていない

ことが問題ですねー。

少なくともクエリの使い方を理解しないと説明も難しい。

やりたいことの説明を理解しようとしているのですが、
ACCESSの問題は別として、
例えば
2/1 A 保留
2/3 A 発送

で保留を抽出したいみたいだけど、元々設計がおかしくないですか?
保留後発送されたのか、新規が発送されたのか全く区別ができないですよね?
そんなもの抽出してどうするのか、わからない。
相談も保留と同じだから、設計を考えなおしたらよいと思う。


いずれにしても クエリーの元データをテーブルにしていますよね。それと同じように元データのテーブルはクエリでも同じだから他の回答者様の クエリからクエリを呼ぶことでなんとなくできるとは思う。

私の勝手な解釈
 Aさん 1/1 注文
      1/20 相談
      1/23 保留
      2/3  発送
とすれば 2/3発送時点で その前のすべてが消え去ることになるようにしなければならないのでは?
すなわち 発送を除外するのではなく、 1/1からの履歴をすべて紐つけにしてそのシリーズで管理することが必要なのでは?
と思うのですが。

それとも、何らかの問題があったケースを抽出したいのかな?
    • good
    • 0
この回答へのお礼

masatsanさん、tsubuyukiさんの回答をもとにクエリを作り直しました。
そうしましたら出来上がりました!
勉強になりました。
ありがとうございます。
御面倒をおかけしましてすみませんでした。

お礼日時:2013/02/14 15:42

すいませんが、伝え忘れてました。


悪いことは言いませんから、参考書を一冊買いましょう。
で、読破しましょう。

攻略サイトでピンポイントでコピーペーストしても力にはなりません。
それを理解して、正しく応用するには基本を理解しないといけないのですから。


「発送を除く、しかし、全ての発送を除くと困る」
この言葉の真意がわかり、まだクローズされていないようなら、また参上するかもしれません。
    • good
    • 0
この回答へのお礼

お返事遅くなりすみませんでした。

何冊か持っていますので、またこれを機に勉強しなおします。
ご教示ありがとうございます!

お礼日時:2013/02/14 15:33

”そのクエリのデザインビューで、フィールドにある"抽出条件"の項目に、「最新日」を抽出するところに


(SELECT Max(A.コメント日) FR。。。。”
ってどういうこと?

初心者の方が select...を使えるわけないと思うけど。どこからSelect...を持ってきたんですか?
ま。予想はつくかないでもないけど。それはだめだよ。

でデザインビューで開いた画面が 選択クエリー ですよ きっと。

で他の方が回答されているように。(参考にしてくださいね。)
デザインビューで開いて検索条件を入れて、そのクエリーを保存する。 SQLソースをコピーするのではなく。
さらにもう一つのクエリーを開いて(デザインビュー)、他の回答者様のようにする。

もちろんもっと簡単にできるけど、現状はちょっと無理だろう。と思う。
    • good
    • 0
この回答へのお礼

なんとなく理解はしているものの、実際にやってみても全く解決しない状態です…

初心者が頑張って解決しようとしたのが間違いだったのでしょうか…
select...は沢山調べてみてこれしか出てこなかったので、
これしか解決ができないと思ったので、使ってみました。

何か他によい解決方法があれば、ご教示下さい!

お忙しいところ、大変ご面倒をお掛けいたしますが、
よろしくお願いいたします。

お礼日時:2013/02/12 19:42

> 初心者なもので選択クエリをソースにして、選択クエリを作るやり方がわかりません。



そのくらいはご自身で調べましょうよ。と言いたいのをグっと堪えて。



ひとまず、「発送以外」のデータを抽出するクエリを、
選択クエリウィザードに従って作りましょう。
デザインビューまで進んで、
条件に「<>"発送"」で「発送以外」のデータを抽出できますね。
で、「Q_発送以外」と名前をつけて保存しておきましょう。

続いて、選択クエリのウィザードに従って、
最初の「テーブル/クエリ」をさっき作った「Q_発送以外」にしてやりましょう。
で、デザインビューまで進んで、条件でMax関数で最新日を抽出してやるとどうでしょう?


と、言うか、
> 「発送」というワードをはぶきたいのですが、
> それは最新の「発送」というワードだけはぶきたいのです。
なかなか難解な日本語ですが、それはつまり
「各顧客の最新データが"発送"だったら、それは抽出対象」という事ですか?
いや、でもそれだと、
> ・2/1     保留       Aさん
は抽出されてこないですよねぇ?
最新が「発送以外」なら、そのコメントが優先されますよねぇ?
つまり
> ・2/2    次回未定     Bさん
これですよねぇ?
そう考えると「発送」が活きてくるケースなんて無いように思えませんか?

具体的に「どんなケースで"発送"を活かすのか」明示できませんか?
じゃないと、お互いに(他に回答をくださる方も含め)手詰まりですよ。
少なくとも私は、上記の先入観で一杯ですから。
    • good
    • 0
この回答へのお礼

>「各顧客の最新データが"発送"だったら、それは抽出対象」という事ですか?
日本語がおかしくて申し訳ありません。
「発送」というコメント以外の最新データが抽出対象と言うことになります。
なので、「発送」というワードを除いた、それぞれの顧客の最新コメントを抽出したいです
Aさんだけの例を追加すると
1/10  相談
1/30 TELあり
2/1   保留
2/3   発送
だとすると。最新のデータは2/3なのですが、
「発送」する前の対応状況を抽出したいので、
2/1 保留
のデータが出したいのです。

tsubuyukiさんからご教示頂いたようにすると
「発送」以外のデータを抽出するクエリ「Q_発送以外」を作成(<>"発送")
その「Q_発送以外」を使ってもう一つクエリを作って、
>条件でMax関数で最新日を抽出してやるとどうでしょう?
というやり方は理解できました。

ですが、各顧客での最新データを取る為に、
「顧客テーブル」と「Q_発送以外」を繋ぐということですよね?
調べて試してみたMax関数はテーブルにしか反応してくれないようです…

関数がおかしいのでしょうか?調べてみたものを当て込んだだけなので、
反応しないということなのでしょうか?

お礼日時:2013/02/12 19:41

よわったね。


"最新データの抽出にはMax関数を使ってでき、いらないワードである「発送」はクエリのフィールドの抽出条件に『<>”発送”』と入。。。"
って具体的にどういう操作をしました?
どういう画面ですか(この操作をしている)?
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。

具体的な操作は、質問文にありますテーブル1とテーブル2を合わせた1つのクエリを作っています。そのクエリのデザインビューで、フィールドにある"抽出条件"の項目に、「最新日」を抽出するところに
(SELECT Max(A.コメント日) FROM [テーブル1(コメント)] AS A WHERE A.顧客ID = [テーブル1(コメント)].顧客ID)
とMax関数を使って入力しています。
また「コメント」を抽出するフィールドの抽出条件に『<>"発送"』と手入力しました。

お礼日時:2013/02/12 17:19

意味がわからない。


Excelで何をして、ACCESSで何をしたいの?

更新クエリーで何をするんですか?
選択クエリーで問題なくできると思いますが。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
言葉足らずですみません。
何をしたいのかと言いますと、エクセルではデータにある外部データの取り組みを使ってアクセスから抽出したデータをもとに資料を作成しています。
アクセスではデータの管理と最新のデータをとりたいです。

初心者なのでまだ選択クエリがわかりません。
申し訳ありませんが、教えてください。

お礼日時:2013/02/12 15:59

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