質問: 2つのテーブルaとbをマージして新しいテーブルcを作成したいのです。 2つのテーブルaとbをマージして新しいテーブルcを作成したいのです。マージするときは、最新の売上日フィールドをもつレコードを取得します。環境はaccess2000です。どんなsql文を作成すればいいのでしょうか? また、テーブルaにしかないレコード、又はテーブルbにしかないレコードは、そのままテーブルcに追加したいです。 ※下記テーブルaとbは、access内に存在します。テーブルcはaとbのマージ後の結果作成されるテーブルです。 テーブルa 顧客番号 売上日 商品名 備考 1 2000-01-01 ふでばこ a 2 2000-02-02 鉛筆 a 3 2000-03-03 定規 a 4 2000-04-04 シャーペン a 99 2000-09-09 パソコン a テーブルb 顧客番号 売上日 商品名 備考 4 2001-04-04 シャーペン b 2 2000-02-02 鉛筆 b 3 2001-03-03 定規 b 1 1999-01-01 ふでばこ b 100 2005-11-11 ワープロ b テーブルaとbを、最新の売上日の条件でレコードを取得し新しいテーブルcを作成する。 テーブルc 顧客番号 売上日 商品名 備考 1 2000-01-01 ふでばこ a 2 2000-02-02 鉛筆 a 3 2001-03-03 定規 b 4 2000-04-04 シャーペン a 99 2000-09-09 パソコン a 100 2005-11-11 ワープロ b sql文で処理可能なのでしょうか?
回答: サブクエリでネストしても出来ない処理があるのでクエリを分けた方が簡単ですよ。 単純にするなら3つ 'qry1として select テーブルa.顧客番号, テーブルa.売上日, テーブルa.商品名, テーブルa.備考 from テーブルa union select テーブルb.顧客番号, テーブルb.売上日, テーブルb.商品名, テーブルb.備考 from テーブルb; 'qry2として select qry1.顧客番号, max(qry1.売上日) as 売上日の最大, qry1.商品名 from qry1 group by qry1.顧客番号, qry1.商品名; 'qry3として 'テーブルcを作成するなら select qry2.顧客番号, qry2.売上日の最大 as 売上日, qry2.商品名, qry1.備考 into テーブルc from qry2 inner join qry1 on (qry2.売上日の最大 = qry1.売上日) and (qry2.顧客番号 = qry1.顧客番号) group by qry2.顧客番号, qry2.売上日の最大, qry2.商品名, qry1.備考; '既存のテーブルcに追加するならこちらで insert into テーブルc ( 顧客番号, 売上日, 商品名, 備考 ) select qry2.顧客番号, qry2.売上日の最大, qry2.商品名, qry1.備考 from qry2 inner join qry1 on (qry2.売上日の最大 = qry1.売上日) and (qry2.顧客番号 = qry1.顧客番号) group by qry2.顧客番号, qry2.売上日の最大, qry2.商品名, qry1.備考; サブクエリで処理できるところもありますがその辺はご自分でネストしてみてください。