Accessにおいて、
(1)A列、B列、C列をもつデータがテーブルにあります。
これに対して、
(2)A列、B列、C列、D列、E列をもつデータがテーブルに別途あるとします。
(1)に対して、(2)はA列、B列、C列に合致しているデータがいくつあるのか、
A列、B列のみ合致しているデータがいくつあるのか、
A列のみ合致しているデータがいくつあるのか、
A,B,Cいずれも合致していないデータはいくつあるのか?
それぞれのデータを(1)と照らし合わせて(2)から抜き出そうとした場合には、
どのような抽出方法が効率いいのでしょうか?またクエリーは複数に
なってもかまわないのですが、いずれかで抽出された(2)のデータはいずれも
重複して抽出されない、かぶらない(上から順に抽出をかける)ことを前提にした場合の
もっとも適な抽出方法はありますでしょうか。
以下はおまけです(もし余力があれば)
↓
また3つ合致しているデータにはそのレコードの横に列を新しく追加して1とふる、
2つ合致しているのはそのコードの横に列を新しく追加して2とふる
1つ合致しているのはそのコードの横に列を新しく追加して1とふる
0つ合しているのはそのレコードの横に列を新しく追加して0とふる、
という作業をAccessでするとした場合、一致クエリー&更新クエリー&マクロ等で
実現できるのでしょうか?
もしよいお知恵あればご教授いただきたく、
お願いいたします。
No.2ベストアンサー
- 回答日時:
>ABC一致
>AB一致
>AC一致
>BC一致
>A一致
>B一致
>C一致
>全て一致しない
7つのクエリを作成して、ユニオンクエリで不一致クエリを作成してから「全て一致しない」を作る方向とします。
名前は以下の9つ。
Q1_ABCとも一致
Q2_ABのみ一致
Q3_ACのみ一致
Q4_BCのみ一致
Q5_Aのみ一致
Q6_Bのみ一致
Q7_Cのみ一致
Q8_ユニオンクエリ
Q9_全て一致しない(Where条件を変えていろいろ検証)
デザインビューでは説明できないので、SQL文を書きます。
クエリの新規作成>デザインビュー>テーブルの表示(なし)でSQLビューにして
SQL文をコピペしてください。
「Q8_ユニオンクエリ」の他はデザインビューに切り替えて構造をみてください。
SQL文の前一行はクエリ名です。
Q1_ABCとも一致
select T2.列A, T2.列B, T2.列C, T2.列D, T2.列E, 3 AS 評価
from T1 inner join T2 on (T1.列A = T2.列A AND T1.列B = T2.列B AND T1.列C = T2.列C)
;
Q2_ABのみ一致
select T2.列A, T2.列B, T2.列C, T2.列D, T2.列E, 2 AS 評価
from T1 inner join T2 on (T1.列A = T2.列A AND T1.列B = T2.列B)
where T1.列C <> T2.列C
;
Q3_ACのみ一致
select T2.列A, T2.列B, T2.列C, T2.列D, T2.列E, 2 AS 評価
from T1 inner join T2 on (T1.列A = T2.列A AND T1.列C = T2.列C)
where T1.列B <> T2.列B
;
Q4_BCのみ一致
select T2.列A, T2.列B, T2.列C, T2.列D, T2.列E, 2 AS 評価
from T1 inner join T2 on (T1.列B = T2.列B AND T1.列C = T2.列C)
where T1.列A <> T2.列A
;
Q5_Aのみ一致
select T2.列A, T2.列B, T2.列C, T2.列D, T2.列E, 1 AS 評価
from T1 inner join T2 on (T1.列A = T2.列A)
where T1.列B <> T2.列B AND T1.列C <> T2.列C
;
Q6_Bのみ一致
select T2.列A, T2.列B, T2.列C, T2.列D, T2.列E, 1 AS 評価
from T1 inner join T2 on (T1.列B = T2.列B)
where T1.列A <> T2.列A AND T1.列C <> T2.列C
;
Q7_Cのみ一致
select T2.列A, T2.列B, T2.列C, T2.列D, T2.列E, 1 AS 評価
from T1 inner join T2 on (T1.列C = T2.列C)
where T1.列B <> T2.列B AND T1.列C <> T2.列C
;
Q8_ユニオンクエリ
select * from Q1_ABCとも一致
union
select * from Q2_ABのみ一致
union
select * from Q3_ACのみ一致
union
select * from Q4_BCのみ一致
union
select * from Q5_Aのみ一致
union
select * from Q6_Bのみ一致
union
select * from Q7_Cのみ一致
;
Q9_全て一致しない
select T2.列A, T2.列B, T2.列C, T2.列D, T2.列E, T1.評価
from T2 left join Q8_ユニオンクエリ AS T1 on (T1.列A = T2.列A AND T1.列B = T2.列B AND T1.列C = T2.列C)
where T1.評価 is null
;
ベン図も添付しておくので、各クエリがどこの部分に相当するのか、評価の値で確認してください。
デザインビューに変更して、評価を非表示にすれば、再利用できますが
その前にQ9のwhere条件を色々変えて検証してください。
また、Q8_ユニオンクエリで調整してもOKです。
なお、検証のためには、T2の列A、列B、列Cに、それぞれ値[0、1、2]の3×3×3=27レコードを、
T2の列A、列B、列Cに、それぞれ値[1]のみの1レコードで用意されると良いと思います。
列D・列Eに関してはご自身で進めてみてください。
No.1
- 回答日時:
ACCESSのバージョン記載がないので、2003までと007以降の差はご自身で吸収してください。
基本操作
1)クエリのデザインビューで、選択クエリを新規作成する。
2)[テーブルの表示]でテーブル1(列A・B・C)とテーブル2((列A・B・C・D・E)を追加して[OK]
3)テーブル2のタイトルをダブルクリックして、すべての列が選択されたら、デザイングリッドへドラッグ&ドロップ。
4)テーブル1の列Aをドラッグしてテーブル2の列A上でドロップ。
5)テーブル1の列Bをドラッグしてテーブル2の列B上でドロップ。
6)テーブル1の列Cをドラッグしてテーブル2の列C上でドロップ。
7)赤い!マークで実行。
これで「A列、B列、C列に合致しているデータ」が表示されるので、最終レコードを見れば「いくつあるのか」がわかります。
「A列、B列に合致しているデータ」は6)を行わないで7)実行
「A列に合致しているデータ」は5)6)を行わないで7)実行。
> A,B,Cいずれも合致していないデータはいくつあるのか?
表現があいまいですね。列Bのみ合致するものはどうすれば良いですか?
> 重複して抽出されない、かぶらない(上から順に抽出をかける)ことを前提にした場合の
表現があいまいですね。列Aが合致しても、列Bが合致するもの・しないものがありますよね。どうします?
クエリの新規作成するときに「不一致クエリ ウィザード」で作成してから、デザインビューで構造を参照すると良いかも。
>また3つ合致しているデータにはそのレコードの横に列を新しく追加して1とふる、
> 2つ合致しているのはそのコードの横に列を新しく追加して2とふる
> 1つ合致しているのはそのコードの横に列を新しく追加して1とふる
> 0つ合しているのはそのレコードの横に列を新しく追加して0とふる、
デザイングリッドで、評価用列を3つ作って、それぞれでIIFを用い、条件一致すれば1を不一致なら0を返す列を設け、その結果3つを合計する列を表示すれば可能です。
この回答への補足
bin-chanさん
回答ありがとうございます。私のイメージと同じでしたので安心しました。
以下についてですが、、
> A,B,Cいずれも合致していないデータはいくつあるのか?
表現があいまいですね。列Bのみ合致するものはどうすれば良いですか?
↓
できるのであれば、
ABC一致
AB一致
AC一致
BC一致
A一致
B一致
C一致
全て一致しない
の全てを重複しない形で引っ張りたいです。
それを
以下のように符号をつけることにおいて、不一致クエリーでカバーできますか????
↓
クエリの新規作成するときに「不一致クエリ ウィザード」で作成してから、デザインビューで構造を参照すると良いかも。
>また3つ合致しているデータにはそのレコードの横に列を新しく追加して1とふる、
> 2つ合致しているのはそのコードの横に列を新しく追加して2とふる
> 1つ合致しているのはそのコードの横に列を新しく追加して1とふる
> 0つ合しているのはそのレコードの横に列を新しく追加して0とふる、
このあたり差し支えなければもう少し詳しくお伺いできればと幸いです。
更新クエリーを活用しようと思っていたので、
↓
デザイングリッドで、評価用列を3つ作って、それぞれでIIFを用い、条件一致すれば1を不一致なら0を返す列を設け、その結果3つを合計する列を表示すれば可能です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセル(勝手に太字になる)
-
EXCELで 一桁の数値を二桁に
-
2つのエクセルのデータを同じよ...
-
Excelで、A列にある文字がB列...
-
エクセル 文字数 多い順 並...
-
エクセルの表から正の数、負の...
-
エクセルの項目軸を左寄せにしたい
-
エクセルで一行毎、一枚づつ自...
-
エクセルで文字が混じった数字...
-
エクセルで一列おきに空白列を...
-
エクセルで、列の空欄に隣の列...
-
Excel、市から登録している住所...
-
エクセル 同じ値を探して隣の...
-
エクセルで最初のスペースまで...
-
Excel 文字列を結合するときに...
-
数字の下1桁について0~4は0、5...
-
エクセル 時間帯の重複の有無
-
VBAで文字列を数値に変換したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
エクセル(勝手に太字になる)
-
Excelで半角の文字を含むセルを...
-
エクセル 文字数 多い順 並...
-
2つのエクセルのデータを同じよ...
-
エクセルで文字が混じった数字...
-
文字列に数字を含むセルを調べたい
-
エクセル 時間帯の重複の有無
-
VBAで文字列を数値に変換したい
-
「B列が日曜の場合」C列に/...
-
エクセル 同じ値を探して隣の...
-
エクセルの項目軸を左寄せにしたい
-
エクセルで、列の空欄に隣の列...
-
お店に入るために行列に並んで...
-
Excel、市から登録している住所...
-
エクセルの並び変えで、空白セ...
-
オートフィルターをかけ、#N/A...
-
エクセルの表から正の数、負の...
おすすめ情報