Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

No74484.2つのテーブルから最新情報を抽出する方法

タイトル2つのテーブルから最新情報を抽出する方法
記事No: 74484
投稿日: 2010/05/07(Fri) 11:17
投稿者: ひまわり
OS:WindowsXP
Access Version:2003

ひまわりと申します。
初めて質問させていただきます。
よろしくお願いします。

文書の更新管理のDBを作成しています。
2つのテーブルを用意し、1つは登録、もう1つは更新を管理しています。
登録テーブル
[文書番号](主キー)、[改定]、[名前]…
改定テーブル
[改定番号](主キー)、[文書番号]、[revision]、[名前]…

登録テーブルには新規登録なので、ほとんどの場合[改定]には"NR"ノンレビジョンが入ります。
改定テーブルには改定記録なので、"A" や"B"など大文字アルファベットが入ります。

この登録テーブルの[改定]と改定テーブルの[revision]をあわせて比較し、最新のrevisionをフォーム上の
テキストボックスに表示させたいのです。
つまり、改定記録のないものには、登録テーブルの[NR]を表示させ、
改定記録のあるものには改定テーブルの[A]や[B]などアルファベットの大きいものを選択させて表示する
というしくみをつくりたいと思っています。

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

タイトルRe: 2つのテーブルから最新情報を抽出する方法
記事No: 74486
投稿日: 2010/05/07(Fri) 11:32
投稿者: Suppaman
こういうクエリを作れば良いでしょうね。

SELECT T1.文書番号, T2.改訂番号, Nz(T2.revision, T1.改定) As 改定記録, ・・・・
FROM 登録 AS T1 Left Join 改定 AS T2 ON T1.文書番号 = T2.文書番号;

タイトルRe^2: 2つのテーブルから最新情報を抽出する方法
記事No: 74493
投稿日: 2010/05/07(Fri) 13:25
投稿者: ひまわり
ありがとうございます。

> SELECT T1.文書番号, T2.改訂番号, Nz(T2.revision, T1.改定) As 改定記録, ・・・・
> FROM 登録 AS T1 Left Join 改定 AS T2 ON T1.文書番号 = T2.文書番号;

早速やってみました。

しかし、T1登録テーブルにある文書番号で複数改定のあるものは、T2改定テーブルで
同じ文書番号で改定番号が異なって存在しています。
文書番号 改定番号 改定記録
  001   0001   A
  001   0002   B
  001   0003   C
  001   0004   D
と存在してしまっています。
この同じ文書番号の改定番号が違うものの中から、
上記の場合だと、

D

にあたるものだけを抽出したいと思っています。
ややこしいお願いで申し訳ありません。

タイトルRe^3: 2つのテーブルから最新情報を抽出する方法
記事No: 74494
投稿日: 2010/05/07(Fri) 13:38
投稿者: Suppaman
> しかし、T1登録テーブルにある文書番号で複数改定のあるものは、T2改定テーブルで
> 同じ文書番号で改定番号が異なって存在しています。
> 文書番号 改定番号 改定記録
>   001   0001   A
>   001   0002   B
>   001   0003   C
>   001   0004   D
> と存在してしまっています。
> この同じ文書番号の改定番号が違うものの中から、
> 上記の場合だと、
>
> D
>
> にあたるものだけを抽出したいと思っています。

クエリをデザインビューで開き改定番号の抽出条件に
DMax("改定番号", "改定", "文書番号 = '" & T1.文書番号 & "'")
とすれば良いです。

タイトルRe^4: 2つのテーブルから最新情報を抽出する方法
記事No: 74499
投稿日: 2010/05/07(Fri) 15:33
投稿者: ひまわり
教えていただいたとおりやってみました。

確かに重なった文書番号のもは最新のレビジョンが抽出されるようになりました。

しかし、改定番号のないもの(新規登録のみで改定はされていないもの)
が完全に排除されてしまっています。
NRのものはNRとして表示させたいと思っています。

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

タイトルRe^5: 2つのテーブルから最新情報を抽出する方法
記事No: 74500
投稿日: 2010/05/07(Fri) 15:51
投稿者: Suppaman
> しかし、改定番号のないもの(新規登録のみで改定はされていないもの)
> が完全に排除されてしまっています。
> NRのものはNRとして表示させたいと思っています。

自分の頭も少しは使ってみたら?

タイトルRe^6: 2つのテーブルから最新情報を抽出する方法
記事No: 74502
投稿日: 2010/05/07(Fri) 16:00
投稿者: ひまわり
教えていただいている身で非礼があればお詫びします。

しかし、教えていただいているのをコピーしてそのままはりつけて、
動かないので質問しているわけではないのでご理解ください。

教えていただいた事でさえわかっていない部分が多々あるので
それは自分で調べています。
もちろんできる限りやりたいことをできるように調べてから、です。

タイトルRe^7: 2つのテーブルから最新情報を抽出する方法
記事No: 74510
投稿日: 2010/05/07(Fri) 20:28
投稿者: 夏はやっぱりサマー
改定番号の抽出条件に
DMax("改定番号", "改定", "文書番号 = '" & T1.文書番号 & "'") Or Is Null
だとどうですか?

タイトルRe^8: 2つのテーブルから最新情報を抽出する方法
記事No: 74557
投稿日: 2010/05/10(Mon) 09:49
投稿者: ひまわり
報告が遅くなり、申し訳ありません。
Suppaman 様、夏はやっぱりサマー様ご教授大変感謝いたしております。

なにぶん質問するのは初めてで、非礼があったことはお詫びします。
ですが、何も考えないで質問しているわけではないのはご理解ください。
「頭を使っていない」わけではありません。
SQL文は知識がなく、SQL文の理解からはじめました。
このような経過を記載すればいいのでしょうか。
仕事の時間に追われ、質問と結果のみ記載していました。

夏はやっぱりサマー様に教えていただいたとおりやってみました。
DMax関数で改定テーブルの改定番号の同じものの中から改定が最大のもの、もしくは空白のものを抽出。
改定番号が空白なら、新規取得しかないから、という理解できました。
(あっているかな…)
理想としていた通りの結果を得ることができました。
ありがとうございました。

今後とも、自分で最大限検討してでも困ったことのみを質問させていただきますので
よろしくお願い申し上げます。

再度、お返事が遅れたことをお詫びさせていただきます。

タイトルRe^9: 2つのテーブルから最新情報を抽出する方法
記事No: 74560
投稿日: 2010/05/10(Mon) 10:48
投稿者: Suppaman
> SQL文は知識がなく、SQL文の理解からはじめました。
> このような経過を記載すればいいのでしょうか。
そんな必要はないです。

> 仕事の時間に追われ、質問と結果のみ記載していました。
「質問」と言われているものが全て質問ではなく、ただの「仕様の提示」になっていたので
「自分の頭も少しは使ってみたら?」という回答をしました。

[次頁]


このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています


 

ページの先頭へ 前ページへ戻る