マイクロソフトのアクセスでデータを組み合わせて集計可能か

このQ&Aのポイント
  • マイクロソフトのアクセスを使用して、データを組み合わせて集計することは可能ですか?
  • アクセス初心者で、データベースを作成したいと考えています。
  • 全ての来店者のデータをリスト化する方法はありますか?
回答を見る
  • ベストアンサー

マイクロソフトのアクセスでいくつかのデータと組み合わせて、

マイクロソフトのアクセスでいくつかのデータと組み合わせて、 数値を並べたり、○×をつけることは可能でしょうか? アクセス初心者です。 もし分る方がいたら教えていただきたいです。 (1)【3月の来店者】 Aさん Bさん Cさん Dさん (4)【3月のA購入者】 Aさん Cさん Dさん (5)【3月のB購入者】 Cさん Dさん (6)【来店者の来店回数】 Aさん 1 Bさん 4 Cさん 7 Dさん 2 上記データを使って下記のようなデータベースを作りたいと考えています。 来店者 A購入 B購入 来店回数 Aさん ○ × 1 Bさん × × 4 Cさん ○ ○ 7 Dさん ○ ○ 2 (1)来店者から(2)Aを買った人の抽出や (1)来店者の(4)来店回数を出すのは 選択クエリを使いだすことができたのですが このようにすべての来店者のデータをリスト化することは可能でしょうか? すべてのデータ抽出後にIF関数などを使いエクセルでなら行えるかもしれないのですが データが180万行あるのでアクセス内で行えたら嬉しいです。 説明がわかりにくくて申し訳ないです。。。 もし分る方がいたら助けていただきたいです。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • layy
  • ベストアンサー率23% (292/1222)
回答No.7

Bさん 3回 Bさん 1回 を Bさん 4回 とさせるのがクエリでは簡単ですが、 こういう重複している人を(重複クエリかで)先に確定しておくのも手です。 Bさん 3回 2009年 Bさん 1回 2010年 とか違いのわかる項目があれば。 なければ、 Bさん 1 3回 Bさん 2 1回 と、とりあえず区別できる項目を追加し 別ものとして処理。(重複しないものはすべて1) 回答のため、現在の状況の提示をお願いします。

temitard
質問者

お礼

こちら、テーブルに回数と名前以外の情報がないので区別できませんでした・・・涙 今回は重複があるデータを削除し、正確なものとはなりませんでしたが なんとかデータベースとして形になりました! 本当にどうもありがとうございます!! とてもたすかりました。

その他の回答 (7)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.8

テーブル構成が何となく変な気がしますが、 そのままクエリにすると以下のような感じです。 SELECT A.名前, IIf(B.名前 Is Null,"×","○") AS A購入, IIf(C.名前 Is Null,"×","○") AS B購入, D.回数 FROM ((3月の来店者 AS A LEFT JOIN 3月のA購入者 AS B ON A.名前=B.名前) LEFT JOIN 3月のB購入者 AS C ON A.名前=C.名前) LEFT JOIN 来店者の来店回数 AS D ON A.名前=D.名前 私が訪ねたいのは関連テーブルの名前と、レイアウトです。

temitard
質問者

お礼

こちら、17個のテーブルをつなげて フィールドにiif関数を書いて成功いたしました!!! 本当にこまっていたのでたすかりました!! ありがとうございます!!

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.6

テーブル1 顧客ID 来店日 来店時間・・・ テーブル2 顧客ID 商品1購入フラグ・・・ ・・・ テーブル17 顧客ID 来店回数・・・ というデータが既にあるということであれば、 No1の回答の通り、簡単なクエリ一個でほぼ達成することができます。 が、 データ件数と使用DBの問題 データ構造の問題 (質問からは読み取れませんが、場合によってはインデックスの問題) など根本的な問題がいくつかあると思います。 このようなデータ件数ですと、そちらを解決するほうが優先順位が高いような気がします。

temitard
質問者

補足

データ件数とDBの重さの問題で何度か躓きましたが ようやくほしかったデータベースとなりました!! どうもありがとうございます!!

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

【来店回数×名前】 の意味するところがよく分かっていませんが、 画像でいうと Dさんは1回の来店でA、B、C、D共に購入(購入者の4テーブルに各1レコードずつある)ということでしょうか。 縦軸は来店者 横軸はA購入者、B購入者、・・・・・P購入者、Q購入者、来店回数 と思うのですが、 1つずつ順番に消化すれば、 来店者の来店回数テーブルとA購入者との選択クエリの結果を出すと「来店者、A購入者、来店回数」 その結果に対して、B購入者との選択クエリの結果を出すと「来店者、A購入者、B購入者、来店回数」 ・・・・・、その繰り返しと思いますが効率は悪いです。 購入者テーブル17つを1つのテーブルにまとめておくと、 クロス集計クエリが来店者別購入別の集計をやってくれます。 Aさん A Cさん A Dさん A Cさん B Dさん B ・・・ Dさん Q があれば Aさん A Cさん A B Dさん A B Q にできます。(1次元を2次元へ、判定入れれば「件数」でも「○」でも「A」でも可。) たぶんこれのが良いかと。 警告についてはまだよくわかりません。

temitard
質問者

補足

ご回答本当にありがとうございます。 >Dさんは1回の来店でA、B、C、D共に購入(購入者の4テーブルに各1レコード >ずつある)ということでしょうか。 こちらですが、その通りになります。 2個目に提示していただいたやり方で挑戦してみようとおもいます。 そして、また一つ問題があり、 登録者名+来店回数のデータに重複があります。 登録者名を一回退会し、その後同じ名前で再登録した場合、 登録者名に重複がのこり、来店回数にも違うデータが入ってしまいます。 たとえば Aさん 1回 Bさん 3回 Bさん 1回 Cさん 5回 Dさん 1回 こちらですが、Bさんの登録回数をどちらか一つ(上だけなど)にして 集計することは可能でしょうか? 警告については、DBの容量が多数のクエリが入っていたため 重すぎたようでした。 新しいDBでテキスト形式に無事変換することもできました。 みなさん、本当にたすかります涙…; ありがとうございます。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

補足) 本題は別なので・・・簡単に。 これからやっていく上で、毎度180万件を処理するのは大変です。 途中までのデータを保持しておける方が便利なときもあります。 例えば、 全体処理が3時間かかってしまうところを、 3つに区切ることで2時間+30分+30分となる場合、 17:00から開始して20:00まで待つか、 17:00から開始して19:00までやっておいて、続きは別タイミング。 とか 3つめの処理でやり方が変わったとき3つ目だけやり直せばよいが、 一気にとなると3時間また最初から、となり何かと不都合が起きやすいです。 これだけのオーダーなので、PCがフリーズしないとは限りませんし。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

できますよ。 例えば、○×ならクエリのフィールドにIIfを使ったり すれば実現できます。テーブル構成が分からないので、 具体的なSQLは提示できません。 おそらく、サブクエリを組み合わせることで、一つの クエリで実現できると思います。

temitard
質問者

補足

ありがとうございます。 理想はこちらのJPEG画像のような形にしたいです。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1241073777 テーブル構成としては (1)3月の来店者 (2)~(16)商品購入ありなし+来店者 (17)過去分すべての来店者+来店回数 になっています。 お忙しい中ご返答本当にありがとうございます!

  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

更新のケースがなく統計をとるケースのようなので、 選択クエリやクロス集計クエリを使うことになります。 抽出レコード件数が回数を意味することになると思います。 どのテーブルにも共通の項目(ここでは「来店者名」)があればリンクしやすいです。 オーダーが多いので、テーブル作成クエリにも挑戦しておくと良いです。 1)180万件→選択クエリ→テーブル作成クエリ→120万件まで絞り込み、 2)120万件→選択クエリ→テーブル作成クエリ→90万件まで絞り込み、 ・・・と対象を絞り込みながら処理することがデータ保持できて良いです。 1回目がバッチリなら、2回目からは2)以降の処理だけで確認可。 来店日、性別、年齢層、等情報もあれば、 推移グラフとかもっと統計をとることもできます。 エクセルでなくても十分です。 がんばってみましょう。 具体的に分からない機能が出てきたら、新たに質問お願いします。

temitard
質問者

補足

ありがとうございます。 来店者名は、どのデータにも入っていて 最終的には17つのデータが合わさったデータベースにしたいと思っています。 追加で質問させていただきたいのですが 【来店回数×名前】のデータが過去分すべてが入っていて1000万行あります。 こちらを、3月の来店者リストと掛け合わせてまずは270万行にしたいと思い 選択クエリでドラッグしデータ抽出しようとしました。 すると、【来店回数×名前】のデータがOLE オブジェクト型になっているらしく 掛け合わすことができませんでした。 そのため、データ型をテキストに戻そうと思い編集したのですが 【フィールドサイズ"プロパティの設定が小さな値に変更されました。データが失われたことにより、入力規則に違反する可能性があります。】と警告が出てしまいます。フィールドサイズを255まで上げてみたのですがだめで、結局【因数が無効です】というエラーで編集できませんでした。 だいぶ初期的なことを聞いてしまってすいません。 また、 オーダーが多いので、テーブル作成クエリにも挑戦しておくと良いです。 1)180万件→選択クエリ→テーブル作成クエリ→120万件まで絞り込み、 2)120万件→選択クエリ→テーブル作成クエリ→90万件まで絞り込み、 ・・・と対象を絞り込みながら処理することがデータ保持できて良いです。 1回目がバッチリなら、2回目からは2)以降の処理だけで確認可。 こちらは、データをいくつかに区切って集計したほうがよいとうことでしょうか? 大変お忙しい中お手数ですが宜しくお願いいたします。

noname#192382
noname#192382
回答No.1

リレーションの機能を使うことで、(1)(4)(5)(6)の4つのテーブルからクエリーにより最後のテーブルを作ることが出来ます。

関連するQ&A

  • マイクロソフト Accessのクエリーについて

    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でするとした場合、一致クエリー&更新クエリー&マクロ等で 実現できるのでしょうか? もしよいお知恵あればご教授いただきたく、 お願いいたします。

  • アクセスで、条件を付けてカウントしたいです。

    アクセスで、条件を付けてカウントしたいです。 前回こちらで助けていただきました。 http://okwave.jp/qa/q5906286.html おかげで、ほしかったデータベースを作ることができとても感謝しております。 今回、そのデータベースを使い集計している最中に戸惑ってしまう点があり 再度質問させていただきます。 できあがったデータは、添付の画像のようになっています。 そこから来店回数ごとに○×をカウントしたいです。 たとえば、 1回の来店者でAの購入者は5人、Bの購入者は6人、Cの購入者は3人 といったように、一つのクエリで作成したいです。 http://mar1224.fc2web.com/site/access_index03.html こちらのように集計をカウントにして、○×の個数を出すことはできたのですが 一回の集計で複数の商品の購入の有無をデータ化することができませんでした。 目指すものとしては下記のようなデータにしたいです。 来店回数     A購入     B購入     C購入     D購入  1回      80人      90人      53人     24人        2回      70人      100人      74人     55人   3回      93人      44人      42人     77人   4回      55人      63人      23人     66人   5回      80人      90人      53人     24人   6回      80人      440人      52人     24人  Dcount関数を使ってみたのですが うまくいきませんでした。 ちなみに使った式としては A購入= DCount("名前", "3月の来店者データ", "A購入='○'") こちらにすると来店回数とうまく紐づけられませんでした。(トータルの○の個数が出てしまいます。) こちら初歩的な質問で申し訳ございませんが、 アドバイスいただけると幸いです・・・涙 よろしくおねがいいたします。

  • マイクロソフトアクセスについて

    アクセスでデータベースを作っているのですがテーブルを結合させてクエリを作成しているのですが巧く動きません。一般的なものは、自分でできるのですが今回は、ちっょと悩んでいます。 <組合せの内容は> (1)AテーブルにAコード:Bコードがあります。 Aコードは、2000レコードあり重複していません。 Bコードは、同じものもあります。 (2)BテーブルにBコード:C1~C171までのコードが Bコードは、170レコードあり C1~C171までは、同じものもありますし空白のものもあります。 今回作成したいのがAコード:C1~C171コードです。 自分でクエリを作成してみたのですがデータが表示されません。 何かよいヒントを教えてくださると助かります。

  • マイクロソフトアクセスの抽出

    マイクロソフトアクセス2010の使い方の質問です。 次のようなテーブルがあります。 ID   名前1   名前2   名前3 1    A      B○     C 2    D○     E       F○ 3    G      H○     I○ このデータで○がついているもののみを抽出し ID   名前(○あり) 1    B○ 2    D○、F○ 3    H○、I○ このようなテーブルを作成するにはどうしたらいいですか? 各行に必ず○は1つ以上あります。 アクセスは、ド素人ですよろしくお願いします。

  • Access データの追加について

    大変基本的なことで申し訳ありません。 Accessのデータベースを作成したあと、追加して情報を入力すると 例えば、クエリで抽出しても、加わったデータがすぐにリストに 反映されるはずだと思うのですが なぜかそれがうまくいきません。 たとえば、クエリAを作ったあとに、データBをフォームから入力して、 クエリAを開くと、そこにデータBが反映されないということはあるのでしょうか。 その場合は何が原因でしょうか。クエリの設定方法でしょうか。 データは、私のPCのみで管理しており、複数人で入力しているものではありません。 Accessが2003を使用しています。 宜しくお願い致します。

  • Access2000のデーター集計

    Access2000の二つのクエリーのデーターをくっつけて金額を集計したいのですが、どなたか教えていただきませんか? クエリー1 データA、データB、金額 データC、データD、金額 クエリー2 データA、データB、金額 データE、データF、金額 集計結果クエリー データA、データB、金額 データC、データD、金額 データE、データF、金額 宜しくお願いします。

  • Accessで連続データってできますか?

    Aテーブル(データベース)からBテーブルに必要なレコードを抽出して、Bテーブルで編集しています。 Bテーブルで編集したレコードをCテーブルに移動する際に、連続データのフィールドが必要になったので、テーブルのオートナンバー型フィールドを一つ追加しましたが、うまくいきません。 追加クエリでB→Cに移動させるんですが、キー違反がでてクエリが動きません。 できれば、クエリで連続データを作成して、Cテーブルに追加させたいんですが、クエリで連続データって作れるものなのでしょうか?

  • アクセス2010 最新データを抽出する方法

    はじめまして。 アクセスを猛勉強中の初心者です。 過去記事を探しましたが、解決できませんでしたのでご教示お願いします。 やりたいことは、2つのテーブルからクエリを使って、最新のデータを抽出したいです。 ですが、その中に抽出したくないワードが存在します。 それ以外のワードで最新のデータを抽出したいです。 まず、下記のような2つのテーブルがあります。 ●テーブル1        ・ID(主キー)       ・日付 ・コメント ・顧客ID ●テーブル2 ・顧客ID(主キー) ・顧客名 ・住所 次にこのテーブルをクエリにしてデータを返すと、下記のようになります。 日付    コメント      顧客名    ・2/1     保留       Aさん ・2/1     発送       Bさん       ・2/1     相談       Cさん ・2/2    次回未定     Bさん ・2/3     発送       Aさん  ・2/4    次回未定     Dさん        今回抽出したいデータは、「発送」というワードをはぶいた最新のデータをとりたいということです。 なので、データとしては、 日付    コメント      顧客名    ・2/1     保留       Aさん ・2/1     相談       Cさん ・2/2    次回未定     Bさん ・2/4    次回未定     Dさん と、このように抽出したいのです。 最新データの抽出にはMax関数を使ってでき、いらないワードである「発送」はクエリのフィールドの抽出条件に『<>”発送”』と入力することで抽出を防ぐことができたのですが、これらの方法でMax関数を入れて最新データの抽出をしようとすると、全ての「発送」を除いたデータが抽出されるので、最新データに該当する顧客のデータが消えてしまいます。 なので、本来のコメントデータが分からない状態になります。 また、エクセル側でパラメータクエリを使って資料を作成し、アクセスに触ったことがない人たちが使用するので、アクセスを更新してといったことができません。 なので、更新クエリなどを使ってのやり方以外の方法はないでしょうか? 全くの初心者ですので、言葉足らずで説明が分かり辛くて申し訳ありません。 ご教示をお願いいたします。

  • アクセスでのデータ管理について(長文です。)

    アクセス初心者です。 これからデータの入力、管理、帳票をアクセスで構築しようと思っているのですが、アクセスはデータを入力した時点でデータが保存されてしまうので過去のデータが残りません。またデータの変更及び共有をうまくやりたいのですがよい方法がわかりません。 今回構築したいデータベースは、 1.過去の記録がすぐわかるようにしたい。(更新前のデータがわかるようにしたい。) 2.データの変更及び共有を簡略化したい。(A社で変更したデータをB社のデータベースにいれこみたい。) 【データベースの概略イメージ】  A社      B社 データベース1 データベース2(1と同じもの) テーブル1 → テーブル1 テーブル2 → テーブル2 テーブル3 → テーブル3 クエリ1    クエリ1 クエリ2    クエリ2 フォーム1   フォーム1 フォーム2   フォーム2 *リレーションあり *A社でテーブル1の内容を変更して、B社のテーブル1を新しいものに置き換えたい。 (本を読むとリレーションが崩れると書いてありました。) *B社で変更してA社に戻すこともある。 テーブル1 項目 ID 100 住所 あああ 氏名 △△様 電話番号 111-1111 *例えば、ID100のデータの氏名を変更するとき、変更前がどうだったかわかるようにしたい。(1月時点では△△様、2月時点では□□様とか) 誰かアクセスの操作方法に詳しい方がおられましたら、よい方法又はアクセスに関する詳しい本とかサイト等教えて下さい。よろしくお願いいたします。

  • マイクロソフトアクセス クエリについて

    現在マイクロソフトアクセス2010を使用しています。 下記にどの様な状態で、どうしたいのかを明記いたしますので、 ご回答を頂ければと思います。 (現状のテーブル例) 店舗名   日付    種別   11時販売数  15時販売数  20時販売数 A店   2011/1/24  ドリンク     5         6         7 A店   2011/1/24  パン       8        10         11 A店   2011/1/24  デザート    10        11         12 A店   2011/1/24  おにぎり    20        30         40 A店   2011/1/25  ドリンク     6         7         8  A店   2011/1/25  パン       10        12         14 A店   2011/1/25  デザート    15        15         20 A店   2011/1/25  おにぎり    25        25         40 B店   2011/1/24  ドリンク     7         8         9 B店   2011/1/24  パン      10        12         15 B店   2011/1/24  デザート    15        18         20 B店   2011/1/24  おにぎり    25        35         45 B店   2011/1/25  ドリンク     8         9         10  B店   2011/1/25  パン       15        20         25 B店   2011/1/25  デザート    25        25         30 B店   2011/1/25  おにぎり    30        30         45 ※上記はA店・B店の2日間を明記しておりますが、実際には多数の店舗、数ヵ月間の日別データが 蓄積されています。 任意の期間で各店舗の各商品の時間別の平均販売数を抽出しております。 平均値を抽出する際にクエリ実行時に Between [抽出開始日] And [抽出終了日] と条件を指定しています。 この条件をカレンダーを表示させて 抽出範囲を指定するにはどのようにすればよいのでしょうか? よろしくお願いします。