質問: access 2010 複数フィールドの集計について access初心者なので教えて下さい。 車の access 2010 複数フィールドの集計について access初心者なので教えて下さい。 車の整備をやっております。 1)テーブルの構成 テーブルは一つだけです。 主keyは修理受付番号です。 ただしリーレションはありません。 約150車種の車種フィールド、別フィールドに修理工程1〜10があり、約100種類の修理工程よりメカニックが選んだ最大10種類までの修理工程がテキスト型式にてテーブル化されている。 2)テーブルのイメージ フィールド1 フィールド2 フィールド3... 車種 修理工程1 修理工程2... フィット オイル交換 バッテリー交換 プリウス タイヤ交換 アルミ交換 ノート 板金塗装 ヘッドライト交換 エスティマ ワイパー交換 板金塗装 アクア オイル交換 タイヤ交換 フィット アルミ交換 バッテリー交換 ノート タイヤ交換 アルミ交換 ノート タイヤ交換 null ↓ 約10万行続く 3)得たい結果 フィットは2台でオイル交換1、バッテリー交換2、アルミ交換1。 ノートは3台で板金塗装1、ヘッドライト交換1、タイヤ交換2、アルミ交換1。 のように、車種が何で修理工程の何がいくつあったかを集計したいです。 4)エクセルにてピボットテーブルを組んだのですが、150車種及び100種類の修理工程から不規則に選ばれた、修理工程1から10が入っており、行側列側ともに大きく広がってしまい、集計内容が見づらくなってしまいます。 accessのクロス集計も指定出来る限度を超えてしまいます。 修理工程1から10までひとつのフィールドにし、他のフィールドは単純に同じものをコピーしカウントしたら、車種、修理工程以外のレコードが10倍になってしまいます。 5)テーブルは別システムからcsvで出力したものをaccessに取り込んだものです。 3)のような集計結果を出したい場合、どのようにしたら可能かお知恵を下さいますようお願い致します。
回答: ユニオンクエリで 横方向のデータを縦に変換したものをクロス集計します。 「access 横 縦」でググってみてください。 元テーブルを「テーブル1」と仮定します。 select 車種, 修理工程1 as 修理工程 from テーブル1 where 修理工程1 is not null union all select 車種, 修理工程2 as 修理工程 from テーブル1 where 修理工程2 is not null union all select 車種, 修理工程3 as 修理工程 from テーブル1 where 修理工程3 is not null ・・・・・ データとしては必要ありませんが、 [修理受付番号] も加えた方が、デバッグし易いですね。 上記クエリを「クエリ1」として それを元にクロス集計します。 添付図を参照のこと。 右端のフィールドは 台数: first(dcount("*","テーブル1","車種='" & [車種] & "'")) です。 テーブル名、クエリ名は 、実際の 名前に修正してください。