- 締切済み
Access(office2000)
accessを用いてあるデータをまとめたい(集計)のですが、 うまくいきません。 tableが3つあり、各2つフィールドがあります。 どのtableも同じ構成でフィールド1には氏名、フィールド2には数(整数)が入っています。 構成は同じものの、データが異なります。 それぞれのtableのフィールド1は同値のものが多々存在します。 例: table1は name| num1 ---------- aaa | 10 | bbb | 12 | table2は name| num2 ---------- aaa | 8 | bbb | 19 | table3は name| num3 ---------- aaa | 20 | bbb | 5 | ccc | 5 | としたとき、 name| num1| num2|num3 | 計 ---------------------------- aaa | 10 | 8 | 20 | 38 bbb | 12 | 19 | 5 | 36 ccc | 0 | 0 | 5 | 5 となるようにしたいのです。 どのようにすれば値を集計できるでしょうか? よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Pakkun10
- ベストアンサー率44% (22/50)
nameがキーなら、クエリーで3つのテーブルを表示して、 そのname同士を繋げればいいんじゃないでしょうか? bin-chanさんのおっしゃってるやり方は、 3つのテーブルを1つのテーブルのように見なすクエリーの作り方であって、 回答者様の望んでるものとはすこし違うような気がします。
- bin-chan
- ベストアンサー率33% (1403/4213)
遅くなりすみません。手順詳細です。 1.オブジェクト[クエリ]>新規作成>デザインビューをクリック。 「テーブルの表示」をキャンセルして、SQLビューにして以下を貼付てください。 select name, num1 as num, 'num1' as meisho from table1 union select name, num2 as num, 'num2' as meisho from table2 union select name, num3 as num, 'num3' as meisho from table3 ; クエリは[名前を付けて保存]で「元データ」としてください。(任意ですが) 2つの丸が重なったアイコンになります。 2.確認のため、クエリ[元データ]を開いてみて下さい。(値はてきとう) 3テーブルがあたかも1つのテーブルであるような形式になります。 name num meisho ---- --- ------ aa 10 num1 bb 12 num1 cc 13 num2 cc 20 num2 dd 13 num2 ee 13 num3 3.クロス集計はクエリ[元データ]を元に行って下さい。 行見出しは[name]、列見出しは[meisho]、値は[num]の合計。 でも、行合計が左端に表示されてしまいます。
お礼
>遅くなりすみません。手順詳細です。 できました! ありがとうございました。
- bin-chan
- ベストアンサー率33% (1403/4213)
> フィールド1の値は存在したり、しなかったりします。 では、クロス集計クエリを利用しましょう。 ただし、クロス集計のためには3つの列が必要ですので #1の回答を改造しましょう。 1.のテーブルごとのクエリでの集計をやめる。 その代わり、[出所]を持たせる。1~3それぞれ。 ただし、列名はすべて同じにしておく。 2.ユニオンクエリを作成し、1~3をひとつのクエリにする。 3.2.で作成したクエリを元に「クロス集計」する。 行見出しに[name]、列見出しに[出所]、値に[合計] これで無いところは空欄で、マトリックスができるはずです。
補足
たびたびすみません。 ユニオンクエリは初耳・・・でしたので調べ、 いただいた内容のとおり行って見ました。 行った結果、 name| 計 --------- aaa | 38 bbb | 36 ccc | 5 となりましたが、 想定していた、 name| num1| num2|num3 | 計 ---------------------------- aaa | 10 | 8 | 20 | 38 bbb | 12 | 19 | 5 | 36 ccc | 0 | 0 | 5 | 5 にはなりませんでした。 「関連付ける」とはどういったことでしょうか。 参考URLなど添えていただけると幸いです。 よろしくお願いいたします。
- bin-chan
- ベストアンサー率33% (1403/4213)
> tableのフィールド1は同値のものが多々存在します。 とあるので、各テーブルごとに同値を集計するのでしょうか? また、テーブル1と3にはあるが、2にはない、みたいな条件は? 同値を集計する、必ず3テーブルにキーが存在するものとして、以下の作業でOKかな? 1.各テーブルごとにフィールド2を合計するクエリを作成する(3本) 2.更にクエリを作成し、1.の3本を表示させる。 3.各クエリのnameを関連付け(1と3、1と2でOK) 4.表示させる列はqry1.name、qry1.合計、qry2.合計、qry3.合計、総合計: qry1.合計+qry2.合計+qry3.合計 (総合はズームして手で修正) お試し下さい。
補足
回答ありがとうございます。 >同値を集計する、必ず3テーブルにキーが存在するものとして、以下の作業でOKかな? フィールド1の値は存在したり、しなかったりします。 (フィールド1だけではなくフィールド2もそうですが) ようは、テーブル1~3のレコードの数がイコールではないのです。 そういった場合、単にクエリのウィザードだけでは無理でしょうか。
補足
bin-chanさんの方法でも望んだ結果が得ることができました。 が、せっかくなので、 教えていただきたいと思います。 >クエリーで3つのテーブルを表示 は分かります。 >そのname同士を繋げればいいんじゃないでしょうか? がちょっとわかりません。 キーワードとなるような言葉(関連付け?) や参考URLなどをいただけるとありがたいです。 よろしくお願いいたします。