|
まず、第一印象なんですが、全然アクセス的な発想方法ではないなという印象です。
>両テーブルを比較し、以下のようなリスト(テーブル)を得たいです。
アクセスでの発想方法として、両テーブルを比較した結果を
テーブルに残すようなことは通常は行いません。
両テーブルを比較しさえすれば得られるものを、
一々テーブルに格納していたのでは、
テーブル容量が無駄に増えるばかりだからです。
その都度、両テーブルを比較するクエリを作れば、十分であるというのが
アクセスの発想です。
>どのような関数を使い、どのような構造にすべきか
>まったく見当がつきません。
エクセルでは関数を使って結果を表示することが多いようですが、
関数を使うというのは、アクセス的な発想方法ではないです。
アクセスでは、関数の種類がエクセルに比べてずっと少ないと思います。
アクセスでは、どのようなクエリを組もうかという発想をします。
>顧客ID|変更フィールド1|変更フィールド2|変更フィールド3
> 001|会社名
> 004|担当者名
> 007|担当者名 |電話番号
> 010|会社名 |担当者名 |電話番号
××1、××2、××3というフィールド名にした場合、
それは、大抵、テーブルの作り方を間違えています。
このような場合は、変更のあったフィールド名を横に伸ばしていくのではなく、
ひたすら縦に伸ばしていくのが通常です。例えば、次のようにします。
顧客ID|変更フィールド
001|会社名
004|担当者名
007|担当者名
007|電話番号
010|会社名
010|担当者名
010|電話番号
テーブルは、コンピュータにとって使いやすいことというのが何より優先すべきことであり、
コンピュータにとって使いやすいテーブルというのは、えてして人間にとっては見づらいもの
となります。
以上がアクセスでの基本的な発想方法です。
次に、
>顧客ID|変更フィールド1|変更フィールド2|変更フィールド3
> 001|会社名
> 004|担当者名
> 007|担当者名 |電話番号
> 010|会社名 |担当者名 |電話番号
というクエリないしテーブルですが、
こういうクエリやテーブルを作れないことはないですが、かなりややこしいことになるので、
やめた方がいいと思います。
これに対し、新旧両テーブルにおける各フィールドの値が異なる場合には「×」が、
同じである場合は「○」が入る
というクエリであれば、それほど苦労なく、クエリを作れると思います。
顧客ID 会社名 担当者名 電話番号
001 × ○ ○
004 ○ × ○
007 ○ × ×
010 ○ ○ ○
このクエリをSQLで示せば、
SELECT 旧テーブル.顧客ID
,IIF(旧テーブル.会社名 = 新テーブル.会社名,"○","×") AS 会社名
,IIF(旧テーブル.担当者名 = 新テーブル.担当者名,"○","×") AS 担当者名
,IIF(旧テーブル.電話番号 = 新テーブル.電話番号,"○","×") AS 電話番号
FROM 旧テーブル
INNER JOIN 新テーブル
ON 旧テーブル.顧客ID = 新テーブル.顧客ID
WHERE Not (旧テーブル.会社名 = 新テーブル.会社名
AND 旧テーブル.担当者名 = 新テーブル.担当者名
AND 旧テーブル.電話番号 = 新テーブル.電話番号
)
です。
|
|