- ベストアンサー
カウントが出来ません
初心者の質問かもしれませんが聞いてください。現在管理の関係でデータベースを作っているのですが人数のカウントが正常に出来ません。 カウントさせたいのは、国、16以上の男性、16以上の女性、16未満の男性、16未満の女性、を一斉にやりたいのですが・・・お願いします
- it_kenta
- お礼率57% (41/71)
- その他(データベース)
- 回答数11
- ありがとう数5
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
>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 国名; こうですね。
その他の回答 (10)
- ARC
- ベストアンサー率46% (643/1383)
あ、なるほどね。 #10,taka_tetsuさんの回答でいいかと思います。 ちなみに、#7のは、国と性別が行見出しで、Over_16が列見出し、値がIDのカウント、です。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>これは恐らくクロス集計をするのかと思うのですが、 普通の集計クエリで可能です。 >フラグを立てるというとどのような形なのでしょうか? こんな感じですかね。該当の条件に当てはまるときは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の括弧の中には、それぞれの式を入れてください。
補足
いまやって見ましたが、これだと何故かフラグが二つ立つのですが・・・例を挙げると 国 性別 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)
>国 16以上男性 16以上女性 未満男性 未満女性 >A国 3 4 3 5 >B国 6 1 4 2 作れますよ。 16以上男性フラグ、16以上女性フラグ、16未満男性フラグ、16未満女性フラグを作ってあげれば。 ただし、フラグの値は、条件に合えば1、合わなかったら0にします。 そして、それぞれのフラグは集計ではなく、値の合計を求めれば、希望の形の表になります。
補足
これは恐らくクロス集計をするのかと思うのですが、このようなようにするとしたらSQL文を作らないと駄目でしょうか?フラグを立てるというとどのような形なのでしょうか?現在あまり寝ていないので頭の回転が遅いのでその部分も教えていただけると助かります。m(__)m
- ARC
- ベストアンサー率46% (643/1383)
>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にデータを返す」です。 後は普通のピボットテーブルと同様の操作ですね。 ヘルプとかを参考にして頑張ってください。 書式や設定を細かく指定すれば、かなりお望みのものに近い表が作れるはずです。
補足
こんな感じの表なら作れます。 国 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)
>未定義関数にDATEが引っかかりました・・・ あらら(^^; 試しに、Date() を Date に変更して試してみてくださいな。 あと、Date()ではなくて Now()にしても同様の結果が得られるはずですので、そちらでも試してみていただけますか? それでもダメなら、矢張り#4で書いた問題(Accessのバグ)が尾をひいているような気がします。 Accessのバージョンはおいくつですか? 先に書きましたように、サービスパックの導入で現象が改善するかもしれません。 最悪、ツールを利用したOfficeの完全削除→再インストールすれば、動くようになるかと思うんですが… >16以上だけではなく16以上かつ女性、16以上かつ男性、16未満かつ女性、16未満かつ男性という形でいきたいのですが・・・ あ、もちろんこの辺は考慮しています。 もしうまく動いていれば、年齢/性別/国別でのカウントがずらっと表示されるのが確認していただけるはずなんですが…
補足
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)
う~ん、となると、やはりスペルミスか、入力の仕方かの問題になると思うんですが… もう少し詳しく、エラーメッセージを書いていただけたら、解決の糸口が見つかるかもしれません。 (手元のAccess2000+SP3では動いておりますので。) とりあえず今日は寝ます(^^;
補足
あっ何とかなりました。ただ初めに外部取り込みをしたときにネットワークエラーというのは一瞬ヒヤッとしましたが、今は問題ないです。 昨日いただいたものですが、これだとヤバいんです・・・理由は未定義関数にDATEが引っかかりました・・・ もし引っかからないとしても16以上だけではなく16以上かつ女性、16以上かつ男性、16未満かつ女性、16未満かつ男性という形でいきたいのですが・・・大変申し訳ありませんがよろしくお願いします。
- ARC
- ベストアンサー率46% (643/1383)
ん?特に参照設定なんかを追加しなくてもOKなハズなんですが・・・ まずはタイプミスの可能性ですね。 手で打ち込まずに、コピー、ペーストで入力してみたらどうでしょうか。 それでも直らないのでしたら、ひょっとしたら、MDBが部分的に壊れているのかも。 データベースを新規作成して、ファイル→外部データの取り込み→インポートを使用して、お使いのDBのオブジェクトを全部インポートしてみてください。 (もし、参照設定の変更を行っているのでしたら、新規DBの方でも同様の作業を行ってください) もし私の想像通りの現象だとすれば、恐らく上記の作業で直るかと思います。 お使いのAccessが2000でしたら、サービスパック3を導入すればこの現象が起こりにくくなるかと思います。
補足
確かに元に戻りました。しかし先ほどいただいたクエリの計算は出来ませんでした。何か使い方が不正でということが書かれていました。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>レイアウトというとID、氏名、国名、性別、生年月日、住所です。 というレイアウトであれば、あと1つ項目を追加すれば、集計できますね。 16歳以上フラグみたいなものです。 16歳以上たったら1、未満だったら0みたいな。 追加といっても、テーブルのレイアウトを変更する必要はありません。動的に求めてしまえばいいので。 ただし、DBの種類によって求め方が異なるのでここでは 書けません。 で、あとは select 国名, 性別, フラグ, count(*) from テーブル名 group by 国名, 性別, フラグ こんなSQLで求まります。 >2.DBの種類は? AccessとかOracleとかSQLServerとかってことです。 なんでしょう?
補足
DBの種類はACCESSです。クエリでどうにかなればいいのですが・・・
- ARC
- ベストアンサー率46% (643/1383)
DBはAccess、ですよね。 クエリを新規作成し、フィールド欄にID,国,性別及び次の式を入力します。 Over_16: IIf([生年月日]<DateSerial(Year(Date())-16,Month(Date()),Day(Date())),"○","×") (↑生年月日と現在日付から、満年齢で16歳以上か否かを求めています。生年月日が空の場合は、16歳未満に入力される気がします。) で、Σのアイコンをクリックし、IDの集計のみを「カウント」に設定すれば完成かと。
補足
すいません何から何までありがとうございます。今VBで年の計算をしていたら未定義関数と出てきましたが、どのライブラリーを入れてよいかわかんないです・・・
- taka_tetsu
- ベストアンサー率65% (1020/1553)
1.テーブルレイアウトは? 2.DBの種類は?
補足
レイアウトというと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 可能でしょうか? 質問情報として少なければ、追加致します。 よろしくおねがい致します。
- ベストアンサー
- その他MS Office製品
- プログラム/perl カウントについて
プログラム初心者です. 現在,プログラムの書き換えを行っているところです. (言語はperlです 以下のプログラムのnextの前に, 「$bbをカウントし, $bbが2回出てきたらlast」 というプログラムを書きたいと思っています. ------------------------ if($honbun =~ /$boundary/) { $bb++; if($bb >=2) { last; } next; } ---------------- カウントする変数を使うべきだと思うのですが,どのようにすればいいでしょうか; 初心者質問で申し訳ないです.
- 締切済み
- Perl
- 下の表で、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など ピボット関数マクロ何でもいいので簡単な方法があれば教えてください。 宜しくお願いします。
- ベストアンサー
- Excel(エクセル)
- エクセルにて2つの条件を満たす人数のカウント方法
いつもお世話になっています。 エクセルの関数にて質問があります。 ご教授ください。 A1~A20に名前、 B1~B20列に○もしくは空白 C1~C20列に年齢を入れた表があります。 B列に○がついていて、尚且つ年齢が20才未満の 方の人数をカウントしたい場合どのような関数を入力すればいいのでしょうか? ご教授よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- ACCESSのテーブル【住所録】で名字毎に何人いるかカウントしたい
技術が未熟なため、大変困っています。助けてください。 MS ACCESS2002 のデータベースで【住所録】があるとします。 【住所録】テーブルには『氏名』、『住所』の2つのフィールドがあります。 『氏名』フィールドには鈴木_太郎、田中_幸子、佐藤_一郎、等アンダーバーで名字と名前を区切ったフルネームが入っています。 ここからが質問です。 『氏名』の名字だけをグループ化してカウントして新たなクエリーを作れないでしょうか。 例えば、【住所録】を元に、 名字(フルネームの名字のみグループ化) 人数(名字をカウント) 田中 110 鈴木 90 佐藤 78 というクエリができないでしょうか。 あと何かクエリ以外で別のアプローチもあればご教授頂きたいです。 宜しくお願いします。
- ベストアンサー
- その他MS Office製品
お礼
返事が遅れて申し訳ありませんでした。大変よく分かりました