質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

3回答

1682閲覧

access クエリー(クロス集計)の値の順位の付け方

yoteru

総合スコア13

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2018/12/01 07:56

編集2018/12/03 01:13

前提・実現したいこと

1、グラウンドゴルフの地区別集計をクロス集計、Dcount関数で順位を付けたい。
2、レポートでグループ集計はできましたが順位付を行いたい。

以上、どちらかを教えて頂けませんか?

すみません。
再度、お願い致します。
テーブルA ID 町名 参加者名  テーブルB gameID S1 S2 S3 S4
の二つのテーブルをクエリーを作成(Q-a game)、個人別のスコア合計打数: [S1]+[S2]+[S3]+
[S4]を出し、順位: DCount("gameID","Q-a game","合計打数<" & [合計打数])+1にて順位が
できました。ここから町名でグループをしようとしましたができません。質問⓵です。
質問⓶はこのクエリーQ-a gameをレポートにてグループを行いましたら確かに町名毎にまとまり
出来ましたがスコア毎に順位ができません。
以上、何卒よろしくお願い致します。

ご返事ありがとうございました。
現状のクエリのSQLを記入します。SELECT 稼働記録.gameID, 稼働記録.日付, 社員名簿.[a team], 社員名簿.フリガナ, 社員名簿.氏名, 稼働記録.S1, 稼働記録.H1, 稼働記録.N1, 稼働記録.S2, 稼働記録.H2, 稼働記録.N2, 稼働記録.S3, 稼働記録.H3, 稼働記録.N3, 稼働記録.S4, 稼働記録.H4, 稼働記録.N4, [S1]+[S2]+[S3]+[S4] AS 合計打数, [H1]+[H2]+[H3]+[H4] AS 合計1打数, [N1]+[N2]+[N3]+[N4] AS 合計2打数, DCount("gameID","Q-a game","合計打数<" & [合計打数])+1 AS 順位, 社員名簿.性別, IIf([性別],"女性","男性") AS 性別x, 稼働記録.参加
FROM 社員名簿 RIGHT JOIN 稼働記録 ON 社員名簿.ID = 稼働記録.ID
ORDER BY 社員名簿.[a team];

テーブルAは社員名簿 テーブルBは稼働記録です。スコア毎に順位とは合計打数の最少打数が上位に
なります。
これでお答えになっていますか?宜しくお願い致します。

ご回答ありがとうございました。
全体の順位ではなく町の中での順位が出したいとかそういうことですか。
そうなのです。全体での順位ではなく、チーム(町別・4人組)の成績毎の順位付け、
チーム(メンバー、一組4名)成績合計での順位とそのメンバーの成績も反映する。
もうすぐ、試合があり気持ちばかり焦って申し訳ございません。何卒、宜しくお願い
致します。

追記
希望のレイアウト(レポート)
順位(上位)  町名(数値が少ない順)   参加メンバー あ (数値が少ない順)
〃    か 
〃    さ
〃    た
以上、を4段(合計 16名参加)
宜しくお願い致します。

Accessのクエリでグループごとに集計し、その結果に順位を付ける方法を教えて下さい。
テーブルあ  ID  a team 氏名
テーブルい gemeID 日付  ID(テーブルあのIDと参照)スコアS1 スコアS2 スコアS3 スコアS4 合計

上記をクエリで下記に集計(東西南北で各4名参加 計16名)

a team   合計
西     347
東     343
南     381
北     303
この結果に順位を付けたい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2018/12/01 12:09

あまりにも情報がすくなすぎます。どこまでできているのか具体的に提示して、どこがわかないのか、どのようにうまくいかないのか具体的に説明してください。
hatena19

2018/12/02 06:56

テーブルA と テーブルB はどのフィールドで結合しいてるのでしょうか。現状のクエリ Q-a game のSQL文を提示してください。また、「スコア毎に順位」とはどのような順位でしょうか。同じ町内で順位を出したいということでょしうか。また、レポートでは町名でグループ化してその町内での並び順はどのフィールドで決まりますか。合計打数の大きい順ですか。
hatena19

2018/12/03 06:24

まず、上記のリンク先をよんでコードや表はMarkdown記法で記述するようにしてください。上部のツールバーのボタンを使うと簡単に挿入できます。
hatena19

2018/12/03 06:27

追記や修正で質問内容が不正確、矛盾したものになっています。正確なテーブル情報(テーブル名、フィールド名、主キー設定)を提示して、最終的に欲しい結果を詳細に説明してください。レポートなら、Markdownで表形式で提示するか、エクセルで作成してレイアウトイメージを画像として貼り付けると理解されやすいと思います。
guest

回答3

0

ベストアンサー

Q_町別合計、Q_個人別合計 ではそれぞれ町別、個人別の合計は表示できていますか。

できているなら、新規クエリにこの2つを追加して、2つのクエリを「町名」同士で結合してください。
次に、Q_町別合計から 町名, 町別合計 をフィールドに表示させます。
Q_個人別合計 から、氏名、個人別合計 を表示させます。

コントロールソース =1、集計実行 グループ全体 の意味も分からないお教え願います

レポートのデザインビューでテキストボックスのプロパティをそのように設定してください。

こごに出てくる用語が分からなければ、入門書でAccessの基本操作を学習してください。用語からいちいち説明していては、言葉だけでやりとりしていたらいつまでたっても終わりません。

投稿2018/12/04 10:16

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoteru

2018/12/04 11:22

今まで集計全体・グループ全体は触った事がありませんでした。 何とかできました。もう一度、最初から確認をしていますが、 出来ました事を取り急ぎご報告まで。
hatena19

2018/12/04 11:38

できましたか。頑張りましね。言葉だけではそちらの状況も把握しづらく、また、こちらの説明も伝わりにくい中で、なんとかできてよかったです。きっとスキルアップにつながったと思います。
guest

0

質問内容が追記や変更で矛盾したものになっていて、正確なテーブル名やフィールド構成が不明確になっています。情報を整理して、正確な情報を提示してください。でないと回答できません。
また、Markdown記法を活用してください。

以下に質問内容を推理して整理してみました。


下記のようなテーブルがあります。

「社員名簿」テーブルのフィールド

  • ID 主キー
  • 氏名 テキスト型
  • 町名 テキスト型

「稼働記録」テーブルのフィールド

  • gameID
  • ID 社員名簿の外部キー
  • S1 数値型
  • S2 数値型
  • S3 数値型
  • S4 数値型

データ例

社員名簿

ID氏名町名
1西
2西
3西
4西
5

稼働記録

gameIDIDS1S2S3S4
115555
22551010
3310101010
4410101020
552233
・・

上記から最終的にレポートに下記のようなレイアウトで出力したい。

町名町合計社員名社員合計
10010
20
30
40
西14020
30
40
50
以下略・ ・ 

町でグループ化して、
並び順は、町合計で昇順、社員合計で昇順

回答

上記の内容で回答します。

「稼働記録」と「社員名簿」から下記の2つの集計クエリを作成します。

Q_町別合計

SQL

1SELECT 2 社員名簿.町名, 3 Sum(稼働記録.S1+稼働記録.S2+稼働記録.S3+稼働記録.S4) AS 町別合計 4FROM 5 社員名簿 INNER JOIN 稼働記録 6 ON 社員名簿.ID = 稼働記録.ID 7GROUP BY 8 社員名簿.町名;

Q_個人別合計

SQL

1SELECT 2 社員名簿.ID, 3 社員名簿.氏名, 4 社員名簿.町名, 5 Sum(稼働記録.S1+稼働記録.S2+稼働記録.S3+稼働記録.S4) AS 個人別合計 6FROM 7 社員名簿 INNER JOIN 稼働記録 8 ON 社員名簿.ID = 稼働記録.ID 9GROUP BY 10 社員名簿.ID;

この2つのクエリからさらにクエリを作成します。

Q_合計

SQL

1SELECT 2 氏名, 3 町名, 4 町別合計, 5 個人別合計 6FROM 7 Q_町別合計 INNER JOIN Q_個人別合計 8 ON Q_町別合計.町名 = Q_個人別合計.町名 9GROUP BY 10 Q_個人別合計.ID;

このクエリをソースとするレポートを作成します

「グループ化と並べ替え」で下記のように設定します。

並べ替え: 町別合計 昇順 ヘッダーセクションなし
・グループ化: 町名 昇順 ヘッダーセクション付き
・・並べ替え: 個人別合計 昇順 ヘッダーセクションなし

町名グループのグループヘッダーに、町名と町別合計をテキストボックスとして配置します。
さらにテキストボックスを配置して、プロパティを下記のように設定します。

コントロールソース =1
集計実行 全体

これで、町の連番(順位)が表示されます。(ただし、同じ合計値の場合も連番になります。)

詳細セクションに、社員名と社員合計をテキストボックスとして配置します。
さらにテキストボックスを配置して、プロパティを下記のように設定します。

コントロールソース =1
集計実行 グループ全体

これで町内の社員の連番(順位)が表示されます。(ただし、同じ合計値の場合も連番になります。)

以上です。
同じ合計値の場合、同じ順位にしたい場合はVBAが必要になりますので、その場合はコメントください。

投稿2018/12/03 07:33

編集2018/12/04 05:21
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoteru

2018/12/03 07:40

ご連絡を何回も頂きありがとうございます。フォーマットで立ち止まっています。 ご連絡頂いた内容で分かりやすいですね。レポートの町合計で昇順、社員合計で昇順は理解できていますが 町合計の順位が必要です。順位を出す方法をお教え下さい。
hatena19

2018/12/03 09:59

順位は、クエリで出すより、レポートで昇順に並べることができたなら、 レポート上で計算して表示するようにするのが簡単です。 上で例示したレイアウトでいいのなら、それに沿った回答をしますが、それでよろしいですか。
yoteru

2018/12/03 16:30

ご連絡ありがとうございました。順位(1,2,3、)は出ないのですね。ご提案通りの方法で何卒、宜しくお願い致します。
yoteru

2018/12/04 04:12

ご回答ありがとうございます。 Q_個人別合計でSum(稼働記録.S1+稼働記録.S2+稼働記録.S3+稼働記録.S4) 構文エラーが出ます。ご確認をお願い致します。
yoteru

2018/12/04 04:20

すみません。社員名簿.町名の後に,が漏れていました。 先に進みます。何かあったら宜しくお願いします。
yoteru

2018/12/04 04:25

Q_個人別合計 集計関数の一部として指定された式’氏名'を含んでないクエリを実行しようとしました。とエラーが出ます。宜しくお願い致します。
hatena19

2018/12/04 05:24

SQL文にいくつか間違いがあったので修正しました。他にも間違いがあるかもしれませんが、SQLを参考にして、クエリのデザインビューで結合やフィールドの設定をすれば間違いなく作成できると思いますのでご自身でトライしてみてください。
yoteru

2018/12/04 09:43

トライしたのですができません。 Q_合計でエラーが出て前に行けません。 それとコントロールソース =1、集計実行 グループ全体 の意味も分からないお教え願います。
guest

0

いろいろ情報が不足しています。最終的にどのような結果が欲しいのかが依然として不明です。

埒が明かないので、とりあえず、現状のSQLの明らかな間違いを指摘しておきます。

vba

1SELECT 2 稼働記録.gameID, 3 稼働記録.日付, 4 社員名簿.[a team], 5 社員名簿.フリガナ, 6 社員名簿.氏名, 7 稼働記録.S1, 8 稼働記録.H1, 9 稼働記録.N1, 10 稼働記録.S2, 11 稼働記録.H2, 12 稼働記録.N2, 13 稼働記録.S3, 14 稼働記録.H3, 15 稼働記録.N3, 16 稼働記録.S4, 17 稼働記録.H4, 18 稼働記録.N4, 19 [S1]+[S2]+[S3]+[S4] AS 合計打数, 20 [H1]+[H2]+[H3]+[H4] AS 合計1打数, 21 [N1]+[N2]+[N3]+[N4] AS 合計2打数, 22 DCount("gameID","[Q-a game]","合計打数<" & [合計打数])+1 AS 順位, 23 社員名簿.性別, 24 IIf([性別],"女性","男性") AS 性別x, 25 稼働記録.参加 26FROM 27 社員名簿 RIGHT JOIN 稼働記録 28 ON 社員名簿.ID = 稼働記録.ID 29ORDER BY 30 社員名簿.[a team];

見やすく整形しましたが、それ以外で修正したのは
DCountの行だけです。

修正前
DCount("gameID","Q-a game","合計打数<" & [合計打数])+1 AS 順位

修正後
DCount("gameID","[Q-a game]","合計打数<" & [合計打数])+1 AS 順位

フィールド名やテーブル名、クエリ名に空白が含まれる場合は、[]で囲む必要があります。

これで、全データに対しての順位がでると思いますが、ご希望のことはこれではないのですか。
全体の順位ではなく町の中での順位が出したいとかそういうことですか。
また、クロス集計あるいはレポートでどのようなレイアウトで出力したいのですか。

言葉でやりたいことがそちらの状況がまったくわからない他人にも伝わるように説明してください。
それができないのなら、人間のように融通の利かないコンピューターにご希望の命令を伝えることはできないでしょう。

投稿2018/12/02 09:26

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問