• 締切済み

クエリを用いたテーブルの作成方法について

いつも勉強させていただいてます。 アクセスでクエリの勉強をしているのですが、途中でつまずいてしまいました。 詳しい方いらっしゃったら教えて下さい! kenkouというテーブルがあります。そこには、 namae sintyo taizyu siryoku kyoui nen tsuki というフィールドがあります。 さらに、meiboというテーブルがあり、 name というフィールドのみあります。 kenkouには、5人(Aさん~Eさん)のデータがそれぞれ3つずつ格納されています。(計15件) meiboテーブルの中のnamaeと一致するkenkouテーブルのnamaeに対して、nen,tsukiに登録されいている年と月情報から最新のレコードのみを5人それぞれ1件ずつ抽出し、新たなテーブル(kekka)にインサートする、というものを作りたいです。そこには namae sintyo taizyu siryoku kyoi nen tsuki というフィールドがあります。 さらに、最新のレコードにsintyo,taizyu,siryoku,kyoiが登録されていなければ、過去最新のレコードから取得し、そこだけ最新のレコードに上書きする方法も考えています。 whereを使った条件などのsql文は何回も使っているのですが、最新のデータを同じ名前の中から選んでくる、という点と過去のレコードから最新のレコードに上書きするというのがどのような条件を使えばいいのかわかりません。。 どなたかご教授いただけませんでしょうか? よろしくお願いします。

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

いくつか、はっきりさせてください。 (1)身長・体重・視力・胸囲は、必ずセットで登録されますか?    身長のみ登録され、体重・視力・胸囲がNullという場合がありますか?    未登録時に遡るとして、対象者のすべてのレコードが未登録ならどうしますか? (2)年はともかく、月、特に1~9はどのような形式で登録されますか?    01~09?それとも1~9? (3)健康はnamaeなのに、名簿がnameなのには何か理由がありますか?    ついでに言えば、同姓同名にはどう対応します? テストしてませんが身長・体重・視力・胸囲が取得できるとすれば INSERT INTO kenkou ( namae, sintyo, taizyu, siryoku, kyoi, nen, tsuki ) VALUES SELECT T2.namae, T2.sintyo, T2.taizyu, T2.siryoku, T2.kyoi, T2,nen, T2.tsuki FROM kenkou AS T2, (  SELECT namae, max(nen & "/" & tsuki) AS nengetsu  FROM kenkou  GROUP BY namae ) AS T1 WHERE T2.namae = T1.namae AND T2.nen & "/" & T2.tsuki = T1.nengetsu ; 身長・体重・視力・胸囲を考慮するならば INSERT INTO kenkou ( namae, sintyo, taizyu, siryoku, kyoi, nen, tsuki ) VALUES SELECT T2.namae, T2.sintyo, T2.taizyu, T2.siryoku, T2.kyoi, T2,nen, T2.tsuki FROM kenkou AS T2, (  SELECT namae, max(nen & "/" & tsuki) AS nengetsu  FROM kenkou  WHERE sintyo IS NOT NULL AND taizyu IS NOT NULL  AND siryoku IS NOT NULL AND kyoi IS NOT NULL  GROUP BY namae ) AS T1 WHERE T2.namae = T1.namae AND T2.nen & "/" & T2.tsuki = T1.nengetsu ; #副問い合わせのインデントに全角スペースを使ってますので注意してください。

Koh1111
質問者

お礼

bin-chan様 ご回答ありがとうございます。以下回答させていただきます。 (1)身長のみ登録、という場合もあると考えます。また、すべてNULLであればそのままNULLで登録します。 (2)年は4ケタ(2012等)、月1~12という形式で登録されています。 (3)nameとnamaeごちゃごちゃに書いてしまっていました。もうしわけありません。それらはどちらもnamaeであり、同性同名はいないと考えています。 また、プログラムも書いていただき、ありがとうございます! 明日になってしまいますが、さっそく確認し報告します! 親切に回答していただき、ありがとうございます。

Koh1111
質問者

補足

bin-chan様 教えていただいたソースの理解からはじめておりました。まだ完全ではないですが、徐々に理解できていると思います。 初歩的なことになるかもしれませんが、よろしければ教えてください。 (1)meiboにある名前のみkenkouの中から取り出したいと思ったのですが、ほかのテーブルから名前を参照することは可能なのでしょうか? (2)身長・体重・視力・胸囲を考慮する、というのはどのような意味合いなのでしょうか? (3)私なりのソース理解ですが、よければご確認いただけますか? INSERT INTO kenkou ( namae, sintyo, taizyu, siryoku, kyoi, nen, tsuki ) #ここは出力先を指定すると思うので、kenkouではなくkekkaになりますか? VALUES SELECT T2.namae, T2.sintyo, T2.taizyu, T2.siryoku, T2.kyoi, T2,nen, T2.tsuki FROM kenkou AS T2, (  SELECT namae, max(nen & "/" & tsuki) AS nengetsu  FROM kenkou  GROUP BY namae ) AS T1 #この()の使い方が自身ないのですが、kenkouテーブルの中の項目を列とし、 #()の中ではnen,tsukiを間に/を入れて結合させ(?)、その中の最大(最新)を取得し、 #namae毎にそれをやる。その結果をT1とする。この時点で、は、最新のレコードが #各名前1レコードずつできる。 WHERE T2.namae = T1.namae AND T2.nen & "/" & T2.tsuki = T1.nengetsu #kenkouの名前と先ほど作ったレコードの名前が一致、かつ、… すいません、最後のT2.nen & "/" & T2.tsuki = T1.nengetsuこの条件が どのようなことを指しているのかがわかりません…。よければご教授ください! 聞いてばかりで申し訳ないのですが、もう一点、質問させてください! たとえば、身長と体重をセットと考えて、身長だけ書かれていて体重が書かれていない場合、 または、体重だけかかれて身長が書かれていない場合は、過去にさかのぼり、身長、体重がどちらも記入されているデータをセットで取得し、レコードに登録する、というようなこともsqlで作ることは可能でしょうか? 聞いてばかりで申し訳ないですが、もしご存知でしたら教えてください。 よろしくお願いします。

関連するQ&A