ACCESSのクエリで悩んでいます。ご回答頂けると幸いです。

<やりたいこと>
更新履歴を残しつつ、現在事項のみを抽出する作成クエリを作りたい。

<元テーブル : 履歴事項 >

ID│更新日 │コード│内容1  │内容2  │更新理由
01│4/22│001│あいうえお│かきくけこ│新規
02│5/22│002│さしすせそ│たちつてと│新規
03│5/22│001│なにぬねの│     │はひふへほ

更新があったときは、変更する内容だけを入力し、
変更のない内容はNULLにします。


<作成したいテーブル : 現在事項>

コード│内容1  │内容2  
001│なにぬねの│かきくけこ
002│さしすせそ│たちつてと

コードごとに更新日が最新のものを抽出し、ブランクの内容があったら、
その直近の更新日のものを抽出してくるようにしたいのです。


当方初心者のため、できればクエリのデザイン画面で
できる方法があるといいのですが、難しいならSQLも頑張ります。
ご回答、よろしくお願い致します。

A 回答 (1件)

クエリのSQLビューで以下を貼り付け実行してみるとどうなりますか。



SELECT T1.コード,
(SELECT TOP 1 Q1.内容1 FROM 履歴事項 AS Q1 WHERE Q1.コード=T1.コード AND Not Q1.内容1 Is Null ORDER BY Q1.更新日 DESC) AS 内容1,
(SELECT TOP 1 Q2.内容2 FROM 履歴事項 AS Q2 WHERE Q2.コード=T1.コード AND Not Q2.内容2 Is Null ORDER BY Q2.更新日 DESC) AS 内容2
FROM 履歴事項 AS T1
GROUP BY T1.コード;

直にテーブルを作成するのなら、FROM の前に INTO 現在事項 を入れてみてください。

この回答への補足

ご回答が遅くなって申し訳ありません。
丸写しはよくないと思うので、SQLを理解すべく頑張っているのですが、なかなか難しくて。もう少し頑張ってみます。お時間ください。

補足日時:2009/05/29 21:29
    • good
    • 0
この回答へのお礼

ありがとうございました。

ただ、やはりSQLが難しいのと、ブランクの内容があったらその直近の更新日のものを抽出となると、ブランクに変更することができなくなるので、更新日ごとにすべての内容を入れるようにして、クエリの2段重ねで作成しました。

クエリ1で、コードをグループ化し、更新日の最大で集計。
クエリ2で、クエリ1のコードと更新日に、履歴事項テーブルをくっつける。

これでなんとなくうまくいきました。
お騒がせして申し訳ありませんでした。

お礼日時:2009/05/30 12:37

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

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

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


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

人気Q&Aランキング