クロス集計されたデータを元に戻す方法とは?

このQ&Aのポイント
  • クロス集計されたデータを元に戻す方法について調査しています。目標とするデータ形式に変換するための方法やデータベースの適切な構造について知りたいです。
  • クロス集計されたデータを目標とする形に変換する方法を探しています。データベースの適切な構造についてもアドバイスを頂けると助かります。
  • クロス集計されたデータを元の形式に戻す方法を教えてください。また、データベースのデータ構造についてもアドバイスを頂けると幸いです。
回答を見る
  • ベストアンサー

クロス集計されたデータを元に戻すには?

表題の通り、クロス集計されたデータを元に戻す方法を探しています。 現在あるシステムにおいて出力されるデータが以下の様な形式だったとします。 (このデータ出力形式は変更が出来ないものとします。) ■元のデータ形式 時刻, A, B, C, D, 1:00, 1, 2, 3, 4, 2:00, 2, 3, 4, 5, 3:00, 3, 4, 5, 6, 4:00, 4, 5, 6, 7, .... ■目標とするデータ形式 時刻, 分類, 値, 1:00, A, 1, 1:00, B, 2, 1:00, C, 3, 1:00, D, 4, 2:00, A, 2, 2:00, B, 3, 2:00, C, 4, 2:00, D, 5, ... ※フォントがずれるので見辛いかもしれませんがご理解願います。 なお時刻はここでは1:00~24:00までの24個 分類項目は特定の個数 (ここではx個あるとします) データを保存、集計するうえで、クロス集計されているデータ形式は非常に使いにくく、 何とかして目標とする形に変換したいと考えております。 どなたか良い変換方法をご存知でしょうか? またデータベースの基本的な考え方として、やはりテーブルのデータ構造は 今回目標とする様な構造が良いのでしょうか? 一応ある程度データベースを知っている人の意見で今回の変換を考えたのですが、 処理をする上で理想的な構造とはどういったものでしょうか?

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

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

時刻と分類の組み合わせがユニークなのであれば ユニオンクエリで組みかえられます select 時刻,"A" as 分類,[A} as 値 from 元のテーブル union all select 時刻,"B" as 分類,[B} as 値 from 元のテーブル union all ・ ・ ・ select 時刻,"X" as 分類,[X} as 値 from 元のテーブル >データベースの基本的な考え方として、やはりテーブルのデータ構造は >今回目標とする様な構造が良いのでしょうか? そのとおりです

xtoufux
質問者

お礼

ご返答いただきありがとうございます!ユニオンクエリ、聞いたことはありましたが実際に使ったことはありませんでした。 なんとか目標とする形に変換することが出来ました!ありがとうございました。

その他の回答 (1)

  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.1

こんにちは。  貴方が書かれたサンプルデータを見ると、「時刻」ごと、「分類」ごとに1個のデーターしかないようですが、実際のデータもそのような構造なのですか。それであったら、実質的には集計というより、並び替えになっていると思います。  本当のクロス集計は、縦横の項目ごとに複数のデータを足し算しますので、足し算した結果が、「3」であっても、「値」1のデータが3個なのか、「値」3のデータが1個なのかを知るすべはありません。 では。

xtoufux
質問者

補足

反応いただきありがとうございます。 たしかに考えてみるとクロス集計というより並び替えされてクロス集計のような形になっている、が正しかったですね! この並び替えを元に戻す方法を探しておりました。

関連するQ&A

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

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

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

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

  • SQLserverでのクロス集計

    No.1000123の質問に類似しておりますが、ストアドで求めるのではなく、VB6SP4でCREATE VIEWを実行し、クロス集計のViewをデータベースに作成したいのです。 シリアルNo,商品No,発送日 A001,A,2004/09/10 A002,A,2004/09/14 A003,A,2004/09/14 B001,B,2004/09/10 B002,B,2004/09/14 C001,C,2004/09/18 を 商品No,2004/09/10,2004/09/14,2004/09/18 A,1,2,0 B,1,0,1 C,0,0,1 という形に出力したいときは、具体的にどういう手順でSQLを作成して実行すればよろしいでしょうか。 (日付部分が動的に増えたり減ったりします) よろしくお願いします。

  • こういうデータの並べ替えってできるのでしょうか?

    データベースについて疎いもので、どうしていいものか分かりません。 例えば、 |A|あ| | | | |B|あ|い| | | |C|あ|い|う| | |D|あ|い|う|え| というテーブルを |あ|A|B|C|D| |い|B|C|D| | |う|C|D| | | |え|D| | | | という風に並べ替えたりできないのでしょうか? データは全てテキスト型なので、クロス集計もできないのかな、 と思い、途方にくれております。どなたか、こんな方法がある、 というのがございましたら、ご教授願います。    

  • 【エクセル】別シートの元データを、分類方法を変えて集計する方法

    シートA(集計元データ)を、シートB(集計表)に、Bの分類条件にあったデータを検索かつ集計する方法を教えてください。 ○シートA)集計元データの様式 (列a)大分類/条件1、(b)中分類/条件2、(c)小分類/条件3、(d)データ(1)、(e)データ(2)  ↓ ○シートB)集計表の様式 (列a)条件2、(b)条件3、(c)データ(1)、(d)データ(2) ○その他 ※シートA(元データ)の条件(1~3)に該当する内容は、集計期間により変動する(様式は変わらない)が、集計表の様式・条件(2~3)・条件に該当する内容は固定なので、シートAから該当するデータを検索して、シートBに集計しなければならない。 ※シートBでは、集計元データ大分類(条件1)を表記せず、条件2・3から表記するため、その分、データの集計が必要となる。 条件が2列に分かれているためSUMIFが使えず、DSUM・SUMPRODUT・DSUM等など、素人なりに調べて試してみましたが、どうしてもできません。できない理由も含めて、教えていただければと思います。 内容がわかりにくいと思いますが、どうかよろしくお願いいたします。

  • SQL文でクロス集計をしたい

    アクセスでクロス集計のSQL文で作りたいと思っています。 このようなデータがあります 年月 支払先 数量 金額 201301 A 10 1000 201302 A 5 500 201302 B 20 2000 201301 C 10 3000 201303 C 15 1500 このデータを下記のように表示したいのですが、 分からなくて困っています。 支払先  データ   201301 201302 201303 A 数量     10      5 A 金額 1000 500 B 数量      20 B 金額 2000 C 数量     10 15 C 金額 3000 1500 合計 数量 20 25 15 合計 金額 4000 2500 1500 どのようにすれば実現出来ますか? 今は、 SELECT 支払先, "数量" AS データ, Sum(IIf([年月]='201301',[数量],0)) AS 201301, Sum(IIf([年月]='201302',[数量],0)) AS 201302, Sum(IIf([年月]='201303',[数量],0)) AS 201303, FROM T_データ GROUP BY 支払先; のクロス集計を 数量と金額、数量の合計と金額の合計でクロス集計をしたクエリを UNIONで実現しています。 出来れば数量と金額は1つのクエリで実現したいと思いますが方法があれば教えて頂きたい と思います。 どうぞ、よろしくお願い致します。

  • クロス集計とかで可能なのでしょうか?

    商品 購入日  数量 A   07/01  10 A   07/02  20 B   07/01  15 B   07/03  5 C   07/04  20 D   07/02  30 D   07/05  35 D   07/06  40 このようなテーブルがあります。 各商品の購入は、MAX5回までとなっています。 それを 商品|購入1   |購入2  | 購入3  |購入4|購入5 A  |07/01 10|07/02 20| B  |07/01 15|07/03  5| C  |07/04 20| D  |07/02 30|07/05 35|07/06 40 のような表記にしたいのですが、 クロス集計で可能なのでしょうか? よろしくお願いします。

  • 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で教えていただければ 幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。

  • データの集計(?)

    こんにちは 現在CGIで表形式のようなものを作成しているのですが、どうしてもわからない点がありましたので、質問させていただきます。 ファイルレイアウト ($data1,$data2,$data3,$data4,$data5,$data6) という構造時、中身が 2002,5,17,A,00,@@ 2002,5,17,B,00,@@ 2002,5,17,B,00,@@ 2002,5,17,A,00,@@ 2002,5,17,A,00,@@ 2002,5,17,A,00,@@ となっていたとします。 このデータを、4番目のフィールドで集計したい(?)のです。つまり、A=4、B=2という具合にです。 この様な場合、どの様に記述すれば宜しいでしょうか?

    • ベストアンサー
    • CGI
  • EXCELで同じ分類のものを集計する

    ・EXCELで、「件名」「金額」「分類」等がひとつのデータ(行)になっている、簡易データベースがあります。 ・このデータベースは日々追加・更新されます。 ・「分類」には「A」「B」「C」があります。 ・「分類Aの金額」「分類Bの金額」「分類Cの金額」セルを、別の場所に用意しておきます。 データ(行)の「分類」を読み取り、「分類Aの金額」「同B」「同C」に、合計金額を表示させる方法は、ありますでしょうか? EXCELのソートの機能や集計の機能を使わずに、データが追加・更新されたら、セルに新しい合計値が表示されるようにしたいのです。 ご回答よろしくお願いいたします。