• ベストアンサー

カウントが出来ません

初心者の質問かもしれませんが聞いてください。現在管理の関係でデータベースを作っているのですが人数のカウントが正常に出来ません。 カウントさせたいのは、国、16以上の男性、16以上の女性、16未満の男性、16未満の女性、を一斉にやりたいのですが・・・お願いします

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.10

>select >国名, >sum(IIf・・・) As 16歳以上の男, >sum(IIf・・・) As 16歳以上の女, >sum(IIf・・・) As 16歳未満の男, >sum(IIf・・・) As 16歳未満の女, >from テーブル名 >group by 国名 ごめんなさい。カンマが1個所多かったです。 select 国名, sum(IIf・・・) As 16歳以上の男, sum(IIf・・・) As 16歳以上の女, sum(IIf・・・) As 16歳未満の男, sum(IIf・・・) As 16歳未満の女 from テーブル名 group by 国名; こうですね。

it_kenta
質問者

お礼

返事が遅れて申し訳ありませんでした。大変よく分かりました

その他の回答 (10)

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.11

あ、なるほどね。 #10,taka_tetsuさんの回答でいいかと思います。 ちなみに、#7のは、国と性別が行見出しで、Over_16が列見出し、値がIDのカウント、です。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.9

>これは恐らくクロス集計をするのかと思うのですが、 普通の集計クエリで可能です。 >フラグを立てるというとどのような形なのでしょうか? こんな感じですかね。該当の条件に当てはまるときは1、それ以外は0とします。 16歳以上の男 IIf([性別]='男' And [生年月日]<DateSerial(Year(Now())-16,Month(Now()),Day(Now())),1,0) 16歳以上の女 IIf([性別]='女' And [生年月日]<DateSerial(Year(Now())-16,Month(Now()),Day(Now())),1,0) 16歳未満の男 IIf([性別]='男' And [生年月日]<DateSerial(Year(Now())-16,Month(Now()),Day(Now())),0,1) 16歳未満の女 IIf([性別]='女' And [生年月日]<DateSerial(Year(Now())-16,Month(Now()),Day(Now())),0,1) >このようなようにするとしたらSQL文を作らないと駄目でしょうか? select 国名, sum(IIf・・・) As 16歳以上の男, sum(IIf・・・) As 16歳以上の女, sum(IIf・・・) As 16歳未満の男, sum(IIf・・・) As 16歳未満の女, from テーブル名 group by 国名 となります。 sumの括弧の中には、それぞれの式を入れてください。

it_kenta
質問者

補足

いまやって見ましたが、これだと何故かフラグが二つ立つのですが・・・例を挙げると 国  性別  16歳以上の男、   16歳以上の女、  16歳未満の男、  16歳未満の女 A   男        0           1          0          1 B   女         1           0           1         0 こんな感じです。 これは一体どのようなことが原因なのでしょうか? あとSQL文にの()のところは(例)16歳以上の男の場合IIf([性別]='男' And [生年月日]<DateSerial(Year(Now())-16,Month(Now()),Day(Now())),1,0)を入れればいいんですよね?なぜか式が正しくないと表示されるのですが・・・

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.8

>国  16以上男性 16以上女性 未満男性 未満女性 >A国 3        4        3      5 >B国 6        1        4      2 作れますよ。 16以上男性フラグ、16以上女性フラグ、16未満男性フラグ、16未満女性フラグを作ってあげれば。 ただし、フラグの値は、条件に合えば1、合わなかったら0にします。 そして、それぞれのフラグは集計ではなく、値の合計を求めれば、希望の形の表になります。

it_kenta
質問者

補足

これは恐らくクロス集計をするのかと思うのですが、このようなようにするとしたらSQL文を作らないと駄目でしょうか?フラグを立てるというとどのような形なのでしょうか?現在あまり寝ていないので頭の回転が遅いのでその部分も教えていただけると助かります。m(__)m

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.7

>IDのカウントの中は全部1という形になっているのです そうなんですか? 当方のはこんな感じなんですが Ct   国   性別  Over_16 3   あっち 男    × 8   あっち 男    ○ 2   あっち 女    × 1   あっち 女    ○ 3   こっち 男    × 2   こっち 男    ○ 3   こっち 女    × 3   こっち 女    ○ で、仰るような形にするには、列が2軸のクロス集計をしなくてはいけないですね。 結論から言いますと、Accessのクエリでは、全く同じ形は出来ません。 こんな感じの表なら作れます。 国    Over_16  女  男 あっち  16以上   1  8 あっち  16未満   2  3 こっち  16以上   3  2 こっち  16未満   3  3 また、データをExcelの方に吐き出せば、Excelのピボットテーブルを使って、かなり柔軟なものを作ることが出来ます。 いずれの場合も、 1:まず、先のクエリを編集し、数式の"○"を"16以上"に、"×"を"16未満"に書き換える 2:グループ化を解除する 3:「IDのカウント」となっている部分は、適当に名前を付け替える 4:適当に名前をつけて保存する。 とします。 あとは、Accessのクエリから、クロス集計ウィザードを使って、保存したクエリを指定して、適当に進めていけば、出来るかと思います。 Excelの場合でしたら、 1:データ→ピボットテーブルと…を実行し、 2:「外部データソース」から「ピボットテーブル」を作成します。 3:データの取出しから、MS Accessを選択し、MDBファイルと、上で作成したクエリとを指定します。クエリ上のすべての列を選択して、最後の選択肢は「Microsoft Excelにデータを返す」です。 後は普通のピボットテーブルと同様の操作ですね。 ヘルプとかを参考にして頑張ってください。 書式や設定を細かく指定すれば、かなりお望みのものに近い表が作れるはずです。

it_kenta
質問者

補足

こんな感じの表なら作れます。 国    Over_16  女  男 あっち  16以上   1  8 あっち  16未満   2  3 こっち  16以上   3  2 こっち  16未満   3  3 何故かこのような表すらも作れなかったです・・・ 作れたのは Over_16   性 A国 B国・・・Z国 16以上    男    1   2 16未満 女    1   2 16以上    男    2   1 16未満    女    3   5 こんな感じになってしまいました。クロス集計のやり方違うんだと思うのですが、何事も寝不足なので理解力がないのでどうすればよいのか分からないのでご教授お願いします。 エクセルの集計の方は何かエラー(物理的かな)が出たので再インストールしてからやりたいと思います。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.6

>未定義関数にDATEが引っかかりました・・・ あらら(^^; 試しに、Date() を Date に変更して試してみてくださいな。 あと、Date()ではなくて Now()にしても同様の結果が得られるはずですので、そちらでも試してみていただけますか? それでもダメなら、矢張り#4で書いた問題(Accessのバグ)が尾をひいているような気がします。 Accessのバージョンはおいくつですか? 先に書きましたように、サービスパックの導入で現象が改善するかもしれません。 最悪、ツールを利用したOfficeの完全削除→再インストールすれば、動くようになるかと思うんですが… >16以上だけではなく16以上かつ女性、16以上かつ男性、16未満かつ女性、16未満かつ男性という形でいきたいのですが・・・ あ、もちろんこの辺は考慮しています。 もしうまく動いていれば、年齢/性別/国別でのカウントがずらっと表示されるのが確認していただけるはずなんですが…

it_kenta
質問者

補足

NOW()でうまくいきました。 ACCESSのバージョンは2000です。XPにしようかと思いましたがいろいろ事情があって出来ないんです。(恐らくお金が無いということで)まぁ完全削除は覚悟はしています。 16以上だけではなく16以上かつ女性、16以上かつ男性、16未満かつ女性、16未満かつ男性 というのは (例) 国  16以上男性 16以上女性 未満男性 未満女性 A国 3        4        3      5 B国 6        1        4      2 という形なんですが。 今の状況を説明すると IDのカウントの中は全部1という形になっているのです。なので出来れば上記の状態で表示をさせたいのです。何かすいません。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.5

う~ん、となると、やはりスペルミスか、入力の仕方かの問題になると思うんですが… もう少し詳しく、エラーメッセージを書いていただけたら、解決の糸口が見つかるかもしれません。 (手元のAccess2000+SP3では動いておりますので。) とりあえず今日は寝ます(^^;

it_kenta
質問者

補足

あっ何とかなりました。ただ初めに外部取り込みをしたときにネットワークエラーというのは一瞬ヒヤッとしましたが、今は問題ないです。 昨日いただいたものですが、これだとヤバいんです・・・理由は未定義関数にDATEが引っかかりました・・・ もし引っかからないとしても16以上だけではなく16以上かつ女性、16以上かつ男性、16未満かつ女性、16未満かつ男性という形でいきたいのですが・・・大変申し訳ありませんがよろしくお願いします。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.4

ん?特に参照設定なんかを追加しなくてもOKなハズなんですが・・・ まずはタイプミスの可能性ですね。 手で打ち込まずに、コピー、ペーストで入力してみたらどうでしょうか。 それでも直らないのでしたら、ひょっとしたら、MDBが部分的に壊れているのかも。 データベースを新規作成して、ファイル→外部データの取り込み→インポートを使用して、お使いのDBのオブジェクトを全部インポートしてみてください。 (もし、参照設定の変更を行っているのでしたら、新規DBの方でも同様の作業を行ってください) もし私の想像通りの現象だとすれば、恐らく上記の作業で直るかと思います。 お使いのAccessが2000でしたら、サービスパック3を導入すればこの現象が起こりにくくなるかと思います。

it_kenta
質問者

補足

確かに元に戻りました。しかし先ほどいただいたクエリの計算は出来ませんでした。何か使い方が不正でということが書かれていました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>レイアウトというとID、氏名、国名、性別、生年月日、住所です。 というレイアウトであれば、あと1つ項目を追加すれば、集計できますね。 16歳以上フラグみたいなものです。 16歳以上たったら1、未満だったら0みたいな。 追加といっても、テーブルのレイアウトを変更する必要はありません。動的に求めてしまえばいいので。 ただし、DBの種類によって求め方が異なるのでここでは 書けません。 で、あとは select 国名, 性別, フラグ, count(*) from テーブル名 group by 国名, 性別, フラグ こんなSQLで求まります。 >2.DBの種類は? AccessとかOracleとかSQLServerとかってことです。 なんでしょう?

it_kenta
質問者

補足

DBの種類はACCESSです。クエリでどうにかなればいいのですが・・・

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

DBはAccess、ですよね。 クエリを新規作成し、フィールド欄にID,国,性別及び次の式を入力します。 Over_16: IIf([生年月日]<DateSerial(Year(Date())-16,Month(Date()),Day(Date())),"○","×") (↑生年月日と現在日付から、満年齢で16歳以上か否かを求めています。生年月日が空の場合は、16歳未満に入力される気がします。) で、Σのアイコンをクリックし、IDの集計のみを「カウント」に設定すれば完成かと。

it_kenta
質問者

補足

すいません何から何までありがとうございます。今VBで年の計算をしていたら未定義関数と出てきましたが、どのライブラリーを入れてよいかわかんないです・・・

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

1.テーブルレイアウトは? 2.DBの種類は?

it_kenta
質問者

補足

レイアウトというとID、氏名、国名、性別、生年月日、住所です。 2.DBの種類は? これはなんと言えばいいでしょう。データ管理かな。それともクエリでカウントするのでSQLと言えばいいでしょうか?ここら辺の知識があまり無いので期待できる答えじゃないかもしれません・・・m(__)m

関連するQ&A

  • Excelで複数列に渡る表から●かつ■をカウント

    Excelの数式についての質問です。 名簿の中から●かつ■の条件に合う人数をカウントしたいと思っています。 名前、性別、役職の項目があり、それが各1行ずつではなく、 (A行)名前、(B行)性別、(C行)役職 (D行)名前、(E行)性別、(F行)役職 (G行)名前… というように、3項目が連続して複数列に並んでいる表の中から、 「男性かつ管理職」「女性かつ派遣社員」のような条件に合う人数をカウントしたいです。 項目を1列に統一すればCOUNTIFSで抽出できると思うのですが、 表自体の形式を変えずに、条件に合った人数をカウントする方法があれば教えてください。 よろしくお願い致します。

  • 時間外手当のカウントについて

    いつもお世話になります。 私の職場では時間外手当は1時間以上しないとカウントされません。 申請は1時間以上、15分単位で30分以上の端数は切り上げ、未満は切り捨てとなっています。 ですから極端な場合、毎日50分残業したとしましと・・・ 50分×22稼働日=1100分=18時間20分はノーカウントになってしまいます。 ちなみにタイムレコーダーで管理されておりますので時間外の証拠は残ります。 この様な場合、日々の残業が1時間未満ノーカウントというのは法律上有効なのでしょうか??

  • エクセル カウントの仕方について

    エクセル初心者です。 出勤時間と退勤時間のみの情報で時間帯別の出勤人数を カウントしたいと考えてます。     8/15     8/16    8/17     開始 終了 開始 終了  開始 終了 1さん10:30 16:30    11:30 17:00 2さん16:30 23:30 16:30 23:30 17:00 22:30 3さん 10:30 16:30 11:30 17:00 4さん10:30 22:30 16:30 22:30 17:00 22:30 5さん10:30 16:30 10:30 16:30 6さん10:30 23:30 16:30 23:30 17:00 22:30 7さん16:30 23:30    17:00 22:30                 8/15      8/16     8/17        時間帯人数   時間帯人数   時間帯人数 10:30-15:00 15:00-17:00 17:00-18:00 18:00-20:00 20:00-22:30 20:00-23:30 可能でしょうか? 質問情報として少なければ、追加致します。 よろしくおねがい致します。

  • 有効人数

    有効人数 コードNO     男性      女性    年齢 1100        1              18 1101                1      20 1102        1              25 1103                1      35 1104        1              17 1105                1      19 上の表で20歳未満男性・女性それぞれの人数を有効人数の欄に求めなさい。 この式を教えてください。 関数初心者です。

  • プログラム/perl カウントについて

    プログラム初心者です. 現在,プログラムの書き換えを行っているところです. (言語はperlです 以下のプログラムのnextの前に, 「$bbをカウントし, $bbが2回出てきたらlast」 というプログラムを書きたいと思っています. ------------------------ if($honbun =~ /$boundary/) { $bb++;         if($bb >=2)         {      last; } next; } ---------------- カウントする変数を使うべきだと思うのですが,どのようにすればいいでしょうか; 初心者質問で申し訳ないです.

  • 下の表で、20歳未満男性・女性それぞれの人数を出す計算式を教えてくださ

    下の表で、20歳未満男性・女性それぞれの人数を出す計算式を教えてください。 COUNT関数を使用して 初心者です。 コードNO    男性   女性   年齢    1100 1 26 1101 1 24 1102 1 22 1103 1 30 1104 1 25 1105 1 35 1106 1 18 1107 1 19 1108 1 17 1109 1 16  

  • コードNO       男性      女性      年齢

    コードNO       男性      女性      年齢 1100          1                18 1101                  1        20 1102          1                19 1103                  1        21 1104          1                23 1105                  1        25 上の表で20歳未満男性・女性それぞれの人数をCOUNT関数を使って式を教えてください。 関数初心者です。

  • Excel 条件カウント

    前に類似の質問しましたが、 フラグでなくカウントしたいそうです。 B列   X列   Y列    Z列   AA列  AB列     男性       火曜日  水曜日  木曜日         女性  月曜日  火曜日  水曜日  木曜日  金曜日    男性          男性  月曜日  火曜日  水曜日  木曜日         女性            水曜日  木曜日          ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー C列     X列    Y列   Z列   AA列   AB列    19~22才       火曜日  水曜日  木曜日         51才以上  月曜日  火曜日  水曜日  木曜日  金曜日    41~50才          19~22才  月曜日  火曜日  水曜日  木曜日         31~40才            水曜日  木曜日          ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー アンケート集計の表で男性で「X~AB列のどれかに文字が入っていればカウントX~AB列になにも入っていなければカウントしない」この場合だと2です。女性の場合は2です。 女性、年齢、都道府県など「」内を同じことをする項目が100近くあるので フィルターでは大変です。 下の表は19~22才で「X~AB列のどれかに文字が入っていればカウントX~AB列になにも入っていなければカウントしない」これも2になります。 51才以上は1、41~50才は0、31~40才は1です。 複数回答の項目全てなので。AF~BJ、BK~CLなど ピボット関数マクロ何でもいいので簡単な方法があれば教えてください。 宜しくお願いします。

  • エクセルにて2つの条件を満たす人数のカウント方法

    いつもお世話になっています。 エクセルの関数にて質問があります。 ご教授ください。 A1~A20に名前、 B1~B20列に○もしくは空白 C1~C20列に年齢を入れた表があります。 B列に○がついていて、尚且つ年齢が20才未満の 方の人数をカウントしたい場合どのような関数を入力すればいいのでしょうか? ご教授よろしくお願いします。

  • ACCESSのテーブル【住所録】で名字毎に何人いるかカウントしたい

    技術が未熟なため、大変困っています。助けてください。 MS ACCESS2002 のデータベースで【住所録】があるとします。 【住所録】テーブルには『氏名』、『住所』の2つのフィールドがあります。 『氏名』フィールドには鈴木_太郎、田中_幸子、佐藤_一郎、等アンダーバーで名字と名前を区切ったフルネームが入っています。 ここからが質問です。 『氏名』の名字だけをグループ化してカウントして新たなクエリーを作れないでしょうか。 例えば、【住所録】を元に、 名字(フルネームの名字のみグループ化)  人数(名字をカウント) 田中                  110 鈴木                  90 佐藤                  78 というクエリができないでしょうか。 あと何かクエリ以外で別のアプローチもあればご教授頂きたいです。 宜しくお願いします。