データ集計による地区ごとの出席者数

このQ&Aのポイント
  • グループ化して集計したデータから、地区ごとの出席者数を表示します。
  • [CHIKU]と日付の3項目のデータを元に、グループ化して集計を行います。
  • 集計結果は、地区ごとの雑誌やネット利用者の数を示す表として表示されます。
回答を見る
  • ベストアンサー

グループ化して集計をしたいのですが

[CHIKU]に地区データ。[DATE1][DATE2][DATE3]にそれぞれ日付が入っています。[CHIKU]とこの3項目のデータを元にグループ化して集計を出したいのです。 [DATE1]に日付が入っているレコードをカウントしてそれを、”雑誌”という見出しをつけて表示。[DATE2]はネット、[DATE3]はメールと見出しを付けます。 もとのデータ ---------------------------- CHIKU、DATE1、DATE2、DATE3 ---------------------------- 大阪、2005/09/10、空、空 東京、2005/09/12、空、空 名古屋、空、2005/10/01、空 東京、空、2005/10/10、空 大阪、2005/11/05、空、空 ---------------------------- 出したい集計表 ------------------------- 地区、BAITAI、出席者数 ------------------------- 大阪、雑誌、2 東京、雑誌、1 東京、ネット、1 名古屋、ネット、1 -------------------------

  • ha3y
  • お礼率80% (12/15)

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

  • ベストアンサー
回答No.1

テーブル設計に疑問が残りますが… SELECT CHIKU, '雑誌', COUNT(*) FROM table WHERE DATE1 IS NOT NULL GROUP BY CHIKU UNION SELECT CHIKU, 'ネット', COUNT(*) FROM table WHERE DATE2 IS NOT NULL GROUP BY CHIKU UNION SELECT CHIKU, 'メール', COUNT(*) FROM table WHERE DATE3 IS NOT NULL GROUP BY CHIKU で、いいのでは。

ha3y
質問者

お礼

質問が長すぎて途中できれてしまったので、返事は期待していなかったんですが、わかりにくい内容だったにもかかわらず、ご返答ありがとうございます! しかもバッチリいけました! 自力で考えていたのは、1つのselect分の中でcaseを使用して各日付から架空項目[BAITAI]にデータをセットし、group byでもcaseを使用するというものでした。これでもいけそうなんですが、かなりわかりにくい構造になってきていて、今回教えていただいたunionを使った方法の法が見た目もすっきりしてわかりやすいですね。 本当にありがとうございました!

関連するQ&A

  • 複数シートの内容を1つのシートに集計するVBA

    お世話になります。 ExcelのVBAについて質問させていただきます。 集計.xlsというブックがあります。 この中に[集計]、[東京支店]、[名古屋支店]、[大阪支店]というシートがあります。 やりたい事は[東京支店]、[名古屋支店]、[大阪支店]のシート内容を[集計]シートに順番にコピペしていきたいのです。 下記のVBAを組んでみましたがうまくいきません。 [東京支店]はうまくコピペ出来ますが、[名古屋支店]がコピペされず、[大阪支店]はコピペされますが東京支店のデータのすぐ下ではなく、50行ぐらい下の位置にコピペされてしまいます。 各支店のシートの内容は次の通りです。この内容を[集計]シートにコピペしたいのです。 [日付] [担当者] [金額] 11/1 田中 100円 11/2 山田 500円 どなたかご教授いただけますでしょうか? 環境 Windows XP SP3 Excel2003 ****VBA**** Sub test() Dim 下 As Integer '東京支店 Sheets("東京支店").Select Range("A2").Select '東京支店シートの見出し以外の全データをコピー Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy '集計シートに貼り付け Sheets("集計").Select Range("A2").Select ActiveSheet.Paste '次は名古屋支店 Sheets("名古屋支店").Select Range("A2").Select '名古屋支店シートの見出し以外の全データをコピー Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy '集計シートの最下行を取得 Sheets("集計").Select 下 = Range("A1").CurrentRegion.Rows.Count + 1 '集計シートに貼り付け Range("A2").Select ActiveCell.Offset(下 & "," & 0).Select ActiveSheet.Paste '最後に大阪支店 Sheets("大阪支店").Select Range("A2").Select '大阪支店シートの見出し以外の全データをコピー Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy '集計シートの最下行を取得 Sheets("集計").Select 下 = Range("A1").CurrentRegion.Rows.Count + 1 '集計シートに貼り付け Range("A2").Select ActiveCell.Offset(下 & "," & 0).Select ActiveSheet.Paste End Sub

  • Excel2003でデータの集計をしたいのですが

    下記のようなデータがあるときに日別店舗別商品別の個数の集計表を作成したいのですが。 日付 店舗 商品 個数 1/1 東京 りんご 1 1/1 大阪 みかん 2 1/1 東京 りんご 3 1/2 東京 みかん 4 1/3 東京 りんご 5 1/3 大阪 なし 6 1/3 大阪 りんご 7 1/3 東京 りんご 8 ↓ 集計 1/1 東京 りんご 4 1/1 大阪 みかん 2 1/2 東京 みかん 4 1/3 東京 りんご 13 1/3 大阪 なし 6 1/3 大阪 りんご 7 ピポットテーブルで処理しようとしましたが、うまくいきません。 よい方法はないでしょうか?

  • VBA マクロ 集計の方法

    マクロで集計するツールを作っているのですが、 各々のエクセルに下記のようなデータが入っています。 data.xls 日付 名前 12/1 ああああ 12/5 いいいい 12/8 うううう   ・   ・   ・ data2.xls 日付 名前 12/1 ああああ 12/5 いいいい 12/8 うううう 12/4 3333   ・   ・ このように色々なエクセルのデータを集計する場合、 集計しようとするデータの数がわからない場合は どのように処理したらいいのでしょうか? たとえば、配列をある程度考えられる数分確保し、 その分だけループさせて、日付又は名前が空になるところまでやる必要があるのでしょうか? どのようにしたら、効率よくデータ数を取得できるか教えてください。

  • Excelで、出勤人数の集計方法は?

     現在、私の手元に工場の作業日報のデーターベースがあります。  いつ、誰が、どんな作業を、何時から、何時まで行っていたかというデーターが約半年分、行数にして1万5千行ほどあります。    このデーターベースから、日付毎の出勤人数を集計したいのですが、集計やピポットテーブルを使用しても上手く往きません。  A列に日付、B列に作業者名、C列以降に作業名や時間が入力されているのですが、一人が一日に複数の作業を行った場合、同じ日付に同じ作業者名が幾つもダブって入力されています。  集計やピポットテーブルを使用しても、例えば同じ日付に同じ作業者名が3回登場すると、1とカウントせず、3とカウントしてしまいます。  このように、データーの個数を集計するのではなく、データーが何種類有るかを集計する方法は無いのでしょうか。詳しい方、どうかご教授下さい。  では。

  • エクセルで行数の多いCSVデータの集計方法

    はじめまして。 会社の売上げデータを集計していてわからないことがありご質問させていただきます。 得意先の納品伝票のデータをCSVで出力してそれをエクセルのピボットテーブルで月間の日別商品別の納品数量の表を作っていたのですが、データ件数が多くなり65535行を超えてしまいデータが全て表示できなくなってしまいました。CSVで出力するデータの日付の範囲を一ヶ月ではなく、半月ごとに分けて2つのファイルにして集計しようと思ったのですが、うまく集計する方法がわかりません。このような場合どうやってやるのがよいのでしょうか。 CSVデータは例えて書きますと以下のような配置です。 日付・便・商品名・店舗名・数量・金額・その他・・・ 8/1   1   ビール  名古屋  5   50  8/1   1   日本酒  大阪   3   150 8/2   2   ビール  札幌   4   40 8/3   1   焼酎   東京   2   80 8/3   1   焼酎   名古屋  1   40 このうち店舗別には集計しない為8/3の1便の焼酎の数量は3として集計します。 ピボットテーブルでは縦に商品名、横に日付、でその数量を集計します。また、シートに便を指定できるようにしています。 当社には専門のプログラマーがおらず、業者の方に依頼すると高額な費用が掛かってしまうため予算が無い私には自分で何とかするしか方法が無いです。 どなたかよい方法を教えて頂けませんでしょうか。 よろしくお願い致します。

  • ACCESSで集計カウント0件の場合1と入力される

    再度質問箱に投稿します!Access2000で顧客管理をしているのですが毎日入力している顧客データーの顧客カルテNOからクエリの集計クエリで 一日の人数をカウントしているのですが、来店客が0人の時は0と入力しても1とカウントしてしまいます これを0人とカウントしないと集計結果が間違えてしまいます、どの様にすれば来店客が0人の時集計クエリで0とされるでしょうか? こんな感じです 顧客来店テーブル No カルテNO 日付 名前 etc.....でカルテNOはテキスト型で日付は日付/時刻型です 顧客来店テーブルから顧客来店日の日付別売上集計クエリに日付とカルテNOのフィールドを作って 日付をグループ化してカルテNOをカウントしています 顧客来店日の日付別売上集計クエリ  日付    カルテNO グループ化  カウント 顧客来店テーブルのカルテNOを0と入力すると 顧客来店日の日付別売上集計クエリのカルテNOのカウントで集計結果が0ではなく1と返されるのです、 前回お回答をしてもらった方法で 集計 Where条件 抽出条件 <>"0"にすると日付が無くなってしまいます これですと月の集計をした時に営業日数などが間違ってしまいます、 どの様にすればいいか解らないです、宜しくお願いします

  • Excelピボットテーブルのグループ化ができません

    元データが空白だとグループ化できないのですが、これは解決できないのでしょうか。 日付フィールドで月単位でグループ化したいのですが、 元のリストに日付のないレコードがあるため、できません。空白のまま、または「なし」等で集計できれば理想的なのですが。。。 元データで空白レコードを省けばいいのでしょうが、 他に方法はないのでしょうか?

  • フォームに入力された日付のデータのみコピペする

    お世話になります。 前回に引き続きExcelのVBAについて質問させていただきます。 (前回も似たような質問なので申し訳ございません) 集計.xlsというブックがあります。 この中に[集計]、[東京支店]、[名古屋支店]、[大阪支店]というシートがあります。 前回の質問で[東京支店]、[名古屋支店]、[大阪支店]のシート内容を[集計]シートに順番にコピペすることは出来ました。回答をいただきました皆様ありがとうございました。 今度やりたいことは[東京支店]、[名古屋支店]、[大阪支店]のシート内容を[集計]シートに順番にコピペする時に1つ条件を付けて、[日付がXXXのデータのみコピぺする]といった具合にしたいのです。 各支店のシートの内容は以下の通りです。 日付] [担当者] [金額] 11/1 田中 100円 11/2 山田 500円 今回はフォーム(Form1)を作成して、条件に使う日付を"Text.box1"に入力させるようにしました。 [集計]シートに[東京支店]、[名古屋支店]、[大阪支店]の全データをコピー後に、このフォームを起動させてTextbox1に日付を入力させてから[抽出]というボタンを押したら以下VBAを起動させて、[集計]シートの データを上から下まで全てREADして、Text.box1に入力された日付と異なるデータを削除する方法で実現しようと考えました。 しかし、削除するロジックがうまく動作せず、Textbox1に入力された日付と異なった[集計シート]の日付データでも削除するデータもあれば、削除しないデータもあります。 自分でやっていて効率が悪い方法だな、ともいます・・。 出来れば[集計]シートへのコピペ前にフォームを出して、Textbox1に条件の日付を入力させて[抽出]ボタンを押したら、Textbox1の日付のデータだけをコピペ出来れば最高です。 どなたかご教授いただけますでしょうか? 環境 Windows XP SP3 Excel2003 ****VBA**** Sub test() Dim 下 As Integer '東京支店 Sheets("東京支店").Select Range("A2").Select '東京支店シートの見出し以外の全データをコピー Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy '集計シートに貼り付け Sheets("集計").Select Range("A2").Select ActiveSheet.Paste '次は名古屋支店 Sheets("名古屋支店").Select Range("A2").Select '名古屋支店シートの見出し以外の全データをコピー Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy '集計シートの最下行を取得 Sheets("集計").Select 下 = Cells(Rows.Count, 1).End(xlUp).Row +1 '集計シートに貼り付け Range("A2").Select ActiveCell.Offset(下 ,0).Select ActiveSheet.Paste '最後に大阪支店 Sheets("大阪支店").Select Range("A2").Select '大阪支店シートの見出し以外の全データをコピー Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy '集計シートの最下行を取得 Sheets("集計").Select 下 = Cells(Rows.Count, 1).End(xlUp).Row +1 '集計シートに貼り付け Range("A2").Select ActiveCell.Offset(下 ,0).Select ActiveSheet.Paste '集計シートのデータを全READ i=2 Do 'フォームのTextBox1に入力された日付以外は削除 If Cells(i, 1).Value <> TextBox1.Value Then Rows(i & ":" & i).Select Selection.Delete Shift:=xlUp End If i = i + 1 Loop Until Cells(i, 1) = "" End Sub

  • 月間集計ですべての日付を抽出するには

    Oracle9iで開発をしております。 月間集計をするにあたり、SQLをどのように書けばよいのか質問させていただきたいと思います。 たとえば、COUNTテーブルというテーブルがあり 年月日 カウント数 2005/09/01 1000 2005/09/01 1000 2005/09/02 2000 2005/09/03 3000 2005/09/05 5000 2005/09/06 6000 というようにデータが入っていたとします。 現在、 SELECT 年月日, SUM(カウント数) FROM COUNTテーブル WHERE COUNT_DATE BETWEEN TO_DATE(to_char(?||'/'||?||'/01')) AND LAST_DAY(TO_DATE(to_char(?||'/'||?||'/01'))) GROUP BY 年月日 としていまして、抽出されるデータは 2005/09/01 2000 2005/09/02 2000 2005/09/03 3000 2005/09/05 5000 2005/09/06 6000 となります。 ここで、2004/09/04や2005/09/07以降2005/09/30までのテーブルには存在 しない日付も抽出したいと思っています。 どのようにすれば抽出できるのでしょうか?

  • date関数を使って日次集計表から月次の集計をしたい

    date関数を使って日次集計表から月次の集計をしたい エクセルを使って、下記の計算式で日次集計表のデータから月次の合計をだしたいのですが、date関数の日付を下記の式のような手入力ではなく、A列の月初(2009/05/01・2009/06/01・・・)、B列の月末(2009/06/30・2009/07/31・・・)からダイレクトに持ってきたいのですが、できますでしょうか? =SUMPRODUCT((日次集計!$G$8:$G$10000>=DATE(2009,5,1))*(日次集計!$G$8:$G$10000<=DATE(2009,5,31))*日次集計!$J$8:$J$10000) 宜しくお願いします。