##実現したいこと
Excel VBAにてこの2つのテーブルの結合結果をシートに書き込むマクロを作成しております。
SQL文について教えていただきたく質問しております。
求めたい結果はこのように2つのテーブルを結合させたものです。
##テーブルについて
1.購入者テーブル
ID 管理番号 氏名 累積金額
1 11111 あいうえお ¥56,000
2 22222 かきくけこ ¥12,000
3 33333 まみむめも ¥670,000
2.購入回数テーブル
ID 管理番号 氏名 購入回数
1 11111 あいうえお 10
3 33333 まみむめも 85
4 66666 らりるれろ 96
##やってみたこと①SELECT-UNION
管理システムの関係上、どちらか片方にしかないデータが数多くあるため
UNIONを使って2つのテーブルを結合させました。
こちらを参考に作りました。
リンク内容
SELECT * FROM [購入者テーブル] As A LEFT JOIN [購入回数テーブル] As B ON A.[管理番号] = B.[管理番号] AND A.[氏名] = B.[氏名] UNION ALL SELECT * FROM [購入者テーブル] As A RIGHT JOIN [購入回数テーブル] As B ON A.[管理番号] = B.[管理番号] AND A.[氏名] = B.[氏名];
その結果がこちらになります。
<できなかったこと>
この結果を、別のテーブルにINSERT INTO やSELECT INTO 等で書きだそうと思ったのですが
このエラーが出て実行できませんでした。
また、不要なフィールドがあるため、必要なものだけにしてみました。
SELECT A.[管理番号],A.[氏名],A.[累積金額],B.[購入回数] FROM [購入者テーブル] As A LEFT JOIN [購入回数テーブル] As B ON A.[管理番号] = B.[管理番号] AND A.[氏名] = B.[氏名] UNION ALL SELECT A.[管理番号],A.[氏名],A.[累積金額],B.[購入回数] FROM [購入者テーブル] As A RIGHT JOIN [購入回数テーブル] As B ON A.[管理番号] = B.[管理番号] AND A.[氏名] = B.[氏名];
その結果がこちらになります。
このように、歯抜けといいますか、空白の項目が出てしまうため、次項のUPDATEを試みました。
##やってみたこと②UPDATE
片方のデータにしかない行は管理番号や氏名が表示されないので
データがない場合は片方のテーブルのデータで埋めるようにUPDATE文を作りました。
ただ、やってみたこと①では、UNION結果をテーブルに書き込みできていないので
こちら↓
を別の「テーブル2」に貼り付けて実行しました。
UPDATE [テーブル2] SET [テーブル2].[管理番号] = IIf(IsNull([テーブル2].[管理番号]),"-",[テーブル2].[管理番号]), [テーブル2].[氏名] = IIf(IsNull([テーブル2].[氏名]),[テーブル2].[B-氏名],[テーブル2].[氏名]), [テーブル2].[累積金額] = IIf(IsNull([テーブル2].[累積金額]),"データなし",[テーブル2].[累積金額]), [テーブル2].[購入回数] = IIf(IsNull([テーブル2].[購入回数]),"データなし",[テーブル2].[購入回数])
この結果がこちらになります。
この結果を、必要な列だけにすれば求めたい結果となるのですが、
やってみたこと①の結果をテーブルに書き出せていないため
UPDATEに進めず、困っております。
##教えていただきたいこと
1.UNIONしたSELECT結果をINSERT INTO もしくはSELECT INTOで別のテーブルに書き出すことは
可能でしょうか?
2.もし、別テーブルに書き出しができない場合は、実現する方法はほかにはありますでしょうか・・?
##実行環境
windows10/MS-Access 2016です。
拙い質問で申し訳ありませんが、よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー