• 締切済み

クロス集計のスピードアップ

Accessで数十万件のデータのクロス集計をおこなおうと思っているのですが1日程度時間がかかってしまいます。以下のプロセスでスピードアップが図れそうな事項がございましたらご教授ください。 -------------------------------------------- (1)テーブル「A」とテーブル「B」(両方とも数十万件)を「A」のIDをキーとして「B」のIDと紐付けし、テーブル「A」の全項目とテーブル「B」のある1項目をクエリを用いて出力します。 (2)(1)のクエリをテーブルに変換する。(←ここで非常に時間がかかってしまいます。) (3)(2)についてクロス集計を行う。 -------------------------------------------- (2)でテーブルに変換せずにクロス集計を行っても非常に時間がかかってしまいます。素人質問で大変恐縮ですが何とぞご教授ください。 よろしくお願いいたします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

人類は、使おうとするときに、便利なように、データベースというものを考え作り上げてきました。しかしそのため仕掛けを作る時間、用意する時間も運用する時間もかかります。パソコン他のコンピュタの処理能力〔入出力を含めて)が驚異的に進歩し、それらのデメリットを乗り越えてきました。 パソコンができる前は、大型機のシステムなどで、磁気テープベースの処理が多く、会社ではその当時も何十万件のレコードがあり、集計(統計)表という名のクロス集計表が作られていました。 その際はソート法が多かったと思います。ソート法とは、例えば店別・商品別統計なら、店別にソートして、商品別のポケット(集計結果を持つための変数)を用意し、1レコードを読んでは、該当ポケットに足しこんで行ききました。別の店のレコードが現れると、吐き出し(印刷)をしてました。 これだと質問の例で言うと、必要時間は A.50万件のソート時間 B.ソート後の50万件のレコードの読み込み時間 で済みます。(演算時間等は微々たるものと思う)。 40万件のソートはACCESSではどれほどかかるでしょうか。 こういう原初に返った方法を私なら試してみたい。 しかし質問者はプログラムができないようなので、誰か相談する方でもいれば一度、相談してみてください。 集計という単目的のためには、ストレートな適当な処理ロジックがあるということを言いたいのです。(データベースシステムは単目的ではないのは判りますね)

bird66
質問者

お礼

ご回答ありがとうございました。参考にさせていただきます。

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.1

お望みの回答ではないと理解していますが回答させていただきます。 素直にアクセスではなくデータベースを使った方がいいと思います。 SQL2005Expressなどいかがでしょうか?充分改善されると思います。

bird66
質問者

補足

ご回答大変ありがとうございました。 今回はAccessでなんとか乗り切ることにしました。 今後の為に「SQL2005Express」について詳しいサイトや本がございましたらご教授ください。(「SQL2005Express」でググってもあまりいいサイトがみつからなかったので) 当方最近Accessを使い始めた素人で恐縮ですが、「SQL」自体、Accessにくっついている簡単なプログラム程度の理解しかないです(汗) すいませんがお時間のある時にご教授ください。 よろしくお願いいたします。

関連するQ&A

  • Access2003 クロス集計で集計値を四捨五入

    ☆以下のようなテーブルで、フィールド[ID]~[点数]があり、文字および数字のデータが混在しています。   ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓ =========================================== (テーブル(1)) [ID]  [クラス]  [科目]  [点数]     1     A     英語    11    2     B     英語    22    3     C     数学    33    4     A     国語    44   5     B     数学    55    6     C     国語    66    7     B     国語    77   8     C     英語    88     9     A     数学    99     =========================================== ☆上記のテーブルをクロス集計クエリで集計する ・フィールド[クラス]を行見出しに設定、 ・フィールド[科目]を列見出しに設定、 ・フィールド[点数]を集計する項目にし主計方法を「合計」に設定する。 =========================================== [クロス集計結果]   合計   英語  国語  数学       A  154   11    44    99        B  154   22    88    55     C  187   99    77    33  =========================================== [課題] クロス集計クエリで、集計値を四捨五入する (1) フィールド[クラス]を行見出しに設定、    フィールド[科目]を列見出しに設定、    フィールド[点数]を集計する項目にし主計方法を「合計」に設定する。 (2) クロス集計の値を、下1桁で四捨五入した値を表示する。   (3) 「合計」の値を、下1桁で四捨五入した値を表示する。 ※ クロス集計した合計値を、四捨五入した値を表示する   ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓ =========================================== [クロス集計結果]   合計   英語  国語  数学     A  150   10    40   100        B  150   20    80    60     C  190   90    70    30  ===========================================   ↑  ↑  ↑  ↑  ↑  ↑  ↑  ↑    上記のように、クロス集計クエリでの集計値を四捨五入して 表示させたいのですが、どうすればよろしいでしょうか? また、クエリだけでは出来ない場合は、SQLで教えていただければ 幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。

  • Access2003 クロス集計クエリでの合計

    ☆以下のようなテーブルで、フィールド[ID]~[C]があり、文字および数字のデータが混在しています。   ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓ =========================================== (テーブル(1)) [ID]  [A]      [B]    [C]     1    111     英語    10    2    222     英語    20    3    333     数学    30    4    111     国語    40   5    222     数学    50    6    333     国語    60    7    222     国語    70   8    333     英語    80     9    111     数学    90     =========================================== [課題] クロス集計クエリを作成する (1) フィールド[A]を行見出しに設定、    フィールド[B]を列見出しに設定、    フィールド[C]を集計する項目に設定する。   (2) フィールド[C]の値を列ごとに平均を計算し、    行ごとに合計を計算する。   ※ 列と行で、それぞれ集計した値を表示する   ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓ =========================================== [クロス集計結果]     合計  英語  国語  数学     111  140   10    40    90        222  140   20    70    50     333  170   80    60    30  --------------- 平均  150   36     56   56 ===========================================   ↑  ↑  ↑  ↑  ↑  ↑  ↑  ↑    上記のようなクロス集計クエリの結果を表示させたいのですが、 どうすればよろしいでしょうか? また、クエリだけでは出来ない場合は、SQLで教えていただければ幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。

  • クロス集計クエリ

    こんなデータテーブルがあります、選択クエリ後、クロス集計クエリで (結果)のような表示をしたい、可能でしょうか?ご教授下さい A社  テレビ   A-TV-1 A社  冷蔵庫   A-R-1 A社  エアコン  A-R-1 B社  テレビ   B-TV-2 B社  エアコン  B-BB-1 B社  冷蔵庫   E-E1-1-3   クロス集計クエリ結果       テレビ    冷蔵庫      エアコン A社   A-TV-1    A-R-1      A-R-1 B社   B-TV-2    E-E1-1-3    B-BB-1

  • ACCESSのクロス集計クエリについて

    ACCESS2000のクロス集計クエリで超初歩的な質問なのですが、、 こんなテーブルがあります。 メーカー  商品名 A社    テレビ B社    テレビ A社    ラジオ A社    テレビ これをACCESSのクロス集計クエリでこんな感じにしたいです。 メーカー  商品名   集計 A社    テレビ   2 A社    ラジオ   1 B社    テレビ   1 エクセルでは、行見出しに「メーカー」と「商品名」を入れて値に「メーカー」か「商品名」どちらかを入れれば希望通りの結果になるのですが、ACCESSのクロス集計では、列見出しに必ず入れないとエラーが出るようです。入れなくても良い方法かもっといい方法がありましたらご教授ください。   

  • クロス集計のSQL

    accessのクエリにクロス集計があります 例えば person sex 血液型 ------ --- ------ 111 1 A 222 2 B 333 1 O 100 2 AB ・ ・ 集計↓ sex A B AB O 他 ---- - - - - - 1 15 45 20 10 5 2 20 30 21 12 2 数字は適当です こんな集計をするSQLを知りたいと思っています どこか、これに近いテーマでSQLを解説している サイトでもいいので、ご教授お願いします

    • ベストアンサー
    • MySQL
  • クロス集計クエリの結果を一時テーブルに保存する 

    タイトルのような操作を求め下記のようなやり方を発見したのですが、なぜこのような2種類のクエリを作成しなければならないのかがわかりません。 2つのクエリの意味・役割をご存知の方がいらっしゃったら教えて下さい。 宜しくお願いします。 Q あるテーブルからクロス集計クエリを作成し、そのままそのクエリをテーブル作成クエリにしたところ、クロス集計が解除されてしまいます。クロス集計の結果をテーブルに保存することはできないのでしょうか A クロス集計クエリを作成して、そのままそのクエリをテーブル作成クエリにすることはできないようです。 その場合は、クエリを2つ作成し2段階でテーブルを作成するようにします。 1つめのクエリではテーブルなどを基にしてクロス集計を行います。 2つめのクエリでは1つめのクエリを「テーブルの表示」一覧から「クエリ」タブに切り替えて選択してテーブル作成クエリとします。 参照:http://www.nbcom.co.jp/PC-Support/FAQ/acc/ht/acc092004ht001.shtml

  • クロス集計 エクセル

    アクセスにはクエリにクロス集計がありますが エクセルにもクロス集計と言う機能があるのでしょうか? エクセル2010を持っています。 ピボットテーブルの事を クロス集計と呼ぶのでしょうか?

  • クロス集計の日付表示について

    はじめまして。 クロス集計で悩んでいます。 日別の売上データをクロス集計で表示する際 月別の合計として列軸に表示したいのですが・・・。 例:テーブル:売上一覧 XXX商事 2010/11/5  A商品 2個 XXX商事 2010/11/8  A商品 2個 BBB商会 2010/11/8  B商品 3個 XXX商事 2010/12/5  A商品 2個 のようなでーたーを クエリ:月別売上クロス              2010/11月 2010/12月 ______________________________________________________ XXX商事 A商品   4個     2個 BBB商会 B商品   3個 のように表示したいのです。 この場合テーブルの書式プロパティで "YY/MM"とすればテーブルでは10/11と表示されますが クロス集計にすると、日別で表示されます。(11/5.11/8) どうしたらいいでしょうか

  • クロス集計の効率的なやり方について

    データの項目が22ありまして、これらの項目間のクロス集計を行います。 エクセルを使い、もっとも効率的なやり方があれば教えてください。 やはり一つずつ(AとB、AとC、AとDというように)やらねばならないのでしょうか。 また、エクセルに限らず、他に良いソフトがあれば、それもお教えください。

  • クロス集計の値の表示

    勉強不足のため悩んでいます。 accessにて、下記のようなテーブルとクロス集計を行ったクエリがあるとします。 T_評価  ID 評価 1  優 2  良 3  可 4 不可 Q_クロス集計 氏名  最低科目 科目1 科目2 科目3   AAA    3      2     1     3 BBB   4      3     4     3 CCC    2      1     2     2 このQ_クロス集計クエリをレポートにて出力させたいのですが、 T_評価テーブルを用いて、 氏名  最低科目 科目1 科目2 科目3 AAA    可    良   優    可 BBB  不可    可   不可   可 CCC    良    優   良    良 このようにクロス集計の値(ID)を置き換えたいのですが、 どのようにすればよいのでしょうか?

専門家に質問してみよう