#36 Accessのテーブル左結合 未入金の犯人を捜せ!
Excelユーザー必見!Accessクエリで業務効率を飛躍的に向上させる方法を、図解入りでわかりやすく解説中。
必ずチェックして、業務を効率化しよう!
前回は左結合の深堀りを解説しましたが、実例をもとにおさらいしましょう。
例題が4つあるので、理解が進むと思います。
Accessは視覚的にテーブル操作が捉えられ、その軽い操作性も相まってテーブル連結のイメージが容易に掴めます。
Pythonで行うpandasライブラリの複雑なmerge関数左結合の理解が深まると思います。
同様にExcel、Power BIのPowerQuery上のテーブルリレーション(特に1対多)を理解できるはずです。
サンプルデータは#32で用いたExcelに2ファイル追加したものを使います。
#32のおさらいはこちら↓
今回用いるサンプルデータ↓
解凍すると#32で用いた3ファイルに2つのデータが加わった計5ファイルがダウンロードされます。
任意の場所に格納して、Accessにリンクしてください。
Excelのリンク方法解説はこちら
↓
1.連結するテーブルの内容
今回連結(リレーション)するテーブルの関係をまずは説明します(便宜上、実務の経理処理とはだいぶかけ離れていますがご容赦ください)。
会計処理の流れは、
検収→請求→入金、とすると仮定します。
①テーブル「TC05_検収情報」
「TC05_検収情報」には企業IDに紐づく検収番号と検収日が記されています。
本来であれば何の科目(何の業務)についての検収か、検収番号に紐づく情報があるのが正しいのですが、省略させていただきます。
例えば検収番号1番が「システム業務」の発注だった場合、が2023/03/02に「システム業務構築」が完了した、ということになります。
②テーブル「T03_請求」
別のテーブル「T03_請求」には検収番号と請求書番号が紐づいています。
例では、検収番号1番(上の①の表)が3/2に検収され、3/15に請求されたことになります。
検収番号10番以降は、この請求表には載っていないので、次月に請求される予定です。
③テーブル「TC04_入金情報」
テーブル「TC04_入金情報」請求に対する入金情報が記されています。
請求書番号がキーになります。
例として、検収番号1番(TC05_検収情報)が3/2に検収され(T03_請求)、この表で4/30に入金されたことが分かります。
2.テーブルの左結合(未入金の犯人を捜せ!)例題4つ
例題1
「TC01_企業基本情報」と「TC05_検収情報」を用いて2023/05に検収したレコードを表示してください。
表示項目は、「企業ID」、「会社名」、「検収番号」、「検収日」の4項目です。
完成イメージ
5月に検収した7レコードが表示されます。
それでは抽出を行いましょう。
まずは試しに検収日を5月に絞らないとどういう結果になるかを見てみましょう。
テーブルどうしを左結合し、検収日に抽出条件を指定しないで表示してみます。
すべての企業リストが表示されます。
ここから検収日を5月のものだけ残しましょう。
検収日を5月にしぼります。
"2023/05/*"で、ワイルドカードを後半に1つ追加するだけで5月分だけが特定できましたよね。
検収日を5月にしぼりました。
あれっと思うかもしれません。左結合なのになんで企業IDと会社名が全部表示されないのでしょうか?
たとえ左結合であっても、右側のテーブルを絞り込むためそれにつられて左テーブルもまとまるのです。
よーく考えるとなんとなくわかりますよね。
この抽出方法、実は左結合でなく等結合でも同じ結果になります。
理由は、右テーブルの企業IDと検収番号がユニークだからなのです。
ここら辺は頭がぐちゃぐちゃになりますので軽く流して結構です。
例題2
例題1に請求情報を追加してください。
用いるテーブルは「T03_請求」で、項目「請求月日」を追加で表示します。
まずは回答↓
抽出の画面です
「T03_請求」を検収番号と請求書番号をキーとして左結合します。
実行すると結果が抽出されます↓
検収されているレコードから請求のあるもの、ないもの(空白)両方が抽出されました。
左結合なので、「TC05_検収情報」の"5月検収"全てを含む、「T03_請求」に紐づく情報になりました。
例題3
例題2に入金情報を追加して、請求しているにもかかわらず未入金のレコードを抽出してください。
追加で用いるテーブルは「TC04_入金情報」で、項目「入金日」を追加表示してください。
回答
入金日になっても入金されていない3社が分かりました。
それでは抽出してみましょう。
まずは「TC04_入金情報」を請求書番号をキーにして外部結合して結果をみてみましょう。
入金日の項目は右に追加されました。
注目すべきは「請求月日」です。
設問は「請求しているにもかかわらず未入金のレコードを抽出」なので、請求が発生している企業1~3が該当しますね。
請求が発生しているレコードだけを抽出するには、「請求月日」が"not null"かつ、「入金日」が"null"であればいいので次の条件にします。
請求月日が出ているにもかかわらず、未入金のレコードが抽出されました。
例題4
未入金の会社の担当に至急連絡を取りたいです。
例題3に企業担当の情報を追加して、連絡先を表示してください。
追加で用いるテーブルは「TC02_企業担当」で、項目「部署名」、「担当者名」、「電話番号」を追加表示してください。
回答
担当情報が分かりました。
抽出方法です↓
すでに抽出条件が組まれていますので、元のテーブル「T01_企業基本情報」から左結合してみました。
なんでこのような抽出方法なのか理解できないかもしれません。
次のように考えると納得がいくのではないのでしょうか。
緑で囲った条件で「T01_企業基本情報」が抽出されています。
この時点で「T01_企業基本情報」は3レコード分の情報しかもっていません(=3レコードが抽出されている状態)。
なので、「TC02_企業担当」を左結合しても「T01_企業基本情報」の全レコードは表示されないのです。
今回はちょっと難しい左結合について説明しました。
次回もお楽しみに!