Accessクエリでのグループ化
以下の2つのテーブルが有ります。
■社員テーブル
ID 名前
1 Aさん
2 Bさん
3 Cさん
4 Dさん
5 Eさん
■受付テーブル
ID 受付内容 受付日 社員ID
1 xxxxx 2010/3/1 1
2 xxxxx 2010/3/20 3
3 xxxxx 2010/4/10 2
4 xxxxx 2010/4/11 5
5 xxxxx 2010/4/15 1
6 xxxxx 2010/4/30 2
7 xxxxx 2010/5/3 4
そこで社員毎の受付数をカウントしたいと思っています。
※受付日が2010/4/1以上5/1未満
名前 受付回数
Aさん 1
Bさん 2
Cさん 0
Dさん 0
Eさん 1
となるイメージです。
しかし、実際にクエリを作ると結果が
名前 受付回数
Aさん 1
Bさん 2
Eさん 1
と、なってしまいます。。
名前:グループ化
受付テーブルのID:カウント
受付日:>=2010/04/01 and <2010/05/01
※社員テーブルの『ID』と、受付テーブルの『社員ID』を
紐つけており、結合プロパティでは『社員テーブルの
全レコードと受付テーブルの同じ結合フィールドのレコード
だけを含める』としております。
あらかじめ、受付テーブルで受付期間の条件でクエリ
を作成しておき、それと社員テーブルを紐つけた場合は
イメージ通りの結果になるのですが、1つのクエリで
上記イメージでの結果を表示したいと思ってます。
可能でしょうか?
ご教授願います。
No.1ベストアンサー
- 回答日時:
サブクエリを使うのでしょうか。
以下でどうなりますか。
SELECT 社員.名前, IIF(IsNull(T1.社員ID),0,T1.カウント) AS 受付回数
FROM 社員 LEFT JOIN
(SELECT 社員ID, Count(*) AS カウント FROM 受付
WHERE 受付日 >= #2010/4/1# AND 受付日 < #2010/5/1#
GROUP BY 社員ID) AS T1 ON 社員.ID = T1.社員ID;
社員テーブルを、受付日の範囲でグループ化した社員IDの結果T1と LEFT JOIN で結合します。
この時、社員テーブルにあって T1 に無い社員ID部分は Null となるので、
Null なら 0 へ、そうでなければカウントを受付回数とします。
(Nullのところは見た目、空欄になります)
IIF(IsNull(T1.社員ID),0,T1.カウント) AS 受付回数
↓
T1.カウント AS 受付回数
で確認できると思います。
ご回答の確認をするのが遅くなってしまい申し訳ございません。
30216kikuさまの回答にありましたサブクエリで、イメージ通りの表示が
できるようになりました。
SELECT 社員テーブル.名前, IIf(IsNull(T1.社員ID),0,T1.カウント) AS 受付回数
FROM 社員テーブル LEFT JOIN [SELECT 社員ID, Count(*) AS カウント FROM 受付テーブル
WHERE 受付日>=#4/1/2010# And 受付日<#5/1/2010# GROUP BY 社員ID]. AS T1
ON 社員テーブル.ID = T1.社員ID;
大変勉強になりました。
ありがとうございました。
No.5
- 回答日時:
#1です
現在#4までの投稿通知メールが届いていますが、#1のだけ届いてません。
システム上の何かでしょうか。検閲に回っているとか?
質問者さんへの通知は、どうなっているのでしょう?
#1のは 受付日 >= #2010/4/1# AND 受付日 < #2010/5/1# の決め打ちでしたが
流動的に指定できるようにしてみました。
クエリを開くと [年月?] を聞いてくるので、
「2010/4」とか「H22/4」とか「平成22年4月」とか入力します。
SELECT 社員.名前, IIF(IsNull(T1.社員ID),0,T1.カウント) AS 受付回数
FROM 社員 LEFT JOIN
(SELECT 社員ID, Count(*) AS カウント FROM 受付
WHERE 受付日 >= CDate([年月?]) AND 受付日 < DateAdd("m",1,[年月?])
GROUP BY 社員ID) AS T1 ON 社員.ID = T1.社員ID;
CDate や DateAdd 部分で、日にちを指定しないと1日に解釈してもらえます。
後は、[年月?] 記述部分をフォーム参照に変更するとか・・・
No.4
- 回答日時:
失礼しました。
質問を読み間違えていました。以下です。
TRANSFORM Nz(Count([受付テーブル].[社員ID]),0) AS 社員IDのカウント
SELECT 社員テーブル.名前, Count(受付テーブル.社員ID) AS [合計 社員ID]
FROM 社員テーブル LEFT JOIN 受付テーブル ON 社員テーブル.ID = 受付テーブル.社員ID
GROUP BY 社員テーブル.名前
PIVOT Format([受付テーブル]![受付日],"oooo") In ("1月","2月","3月","4月","5月","6月","7
月","8月","9月","10月","11月","12月");
社員全員を表示することを忘れていました。
Nzのくくりをはずせばデータのない部分は
Nullで表示されます。
No.3
- 回答日時:
もう1つクエリを作成し、
■社員テーブル
ID 名前
1 Aさん
2 Bさん
3 Cさん
4 Dさん
5 Eさん
■既存クエリ
名前 受付回数
Aさん 1
Bさん 2
Eさん 1
を紐付けすれば
■社員テーブル
ID 名前 (クエリの)受付回数
1 Aさん 1
2 Bさん 2
3 Cさん 0かNULL
4 Dさん 0かNULL
5 Eさん 1
ができると思います。
これではダメでしょうか。
No.2
- 回答日時:
必要なければスルーしてください。
別の観点から。一ヶ月単位での集計ならば、
以下のようなものもあります。
TRANSFORM Count(受付テーブル.社員ID) AS 社員IDのカウント
SELECT 社員テーブル.名前, Count(受付テーブル.社員ID) AS [合計 社員ID]
FROM 社員テーブル INNER JOIN 受付テーブル ON 社員テーブル.ID = 受付テーブル.社員ID
GROUP BY 社員テーブル.名前
PIVOT Format([受付テーブル]![受付日],"oooo") In ("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");
最後のIn以下を除けばデータのある月だけ表示されます。
(30246kikuさんオヒサ)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Access クエリ 同一テーブル内 複数フィールドの同時集計のやり方について 1 2022/05/18 19:01
- その他(データベース) accessについて 2 2022/05/31 16:58
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS 一番最新の日付の金額...
-
ビューで引数を使いたい
-
IFで条件を分岐させてのINSERT...
-
SQL 件数取得を速くしたい
-
Access関数について クエリで空...
-
リレーションシップ 全データを...
-
INSERT文でサブクエリ
-
「マスタ」と「テーブル」の違...
-
データの二重表示の原因
-
Accessにインポートしたら並び...
-
accessのロック
-
エクセル
-
ACCESSのSQLで、NULLかNULLでな...
-
インデックスの再構築の意味っ...
-
Access カレントレコードがあり...
-
INSERTにおいてロック処理は必要か
-
SELECT時の行ロックの必要性に...
-
accessテーブル作成クエリを実...
-
Inner join と Left joinの明...
-
symfowareのSQL文in句をバッチ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ビューで引数を使いたい
-
ACCESS 一番最新の日付の金額...
-
Accessで在庫管理を
-
IFで条件を分岐させてのINSERT...
-
DB2 業種毎に連番をつけたいの...
-
複数のテーブルから同じ条件で...
-
二つの表の項目を比較して値を...
-
SQLで○○の値以外を持っているレ...
-
select into句のトランザクショ...
-
SQLについて質問です。 テーブ...
-
大学でSQLの授業があるのですが...
-
Sql文のUpdateと副問い合わせで...
-
SQLの書き方
-
空のテーブルの判別
-
2つのテーブルを結合して合計(...
-
Accessクエリでのグループ化
-
SQL 件数取得を速くしたい
-
Insert Into Select での重複に...
-
INSERT文でサブクエリ
-
年齢分布テーブルの再集計SQL
おすすめ情報