Accessで期間指定の売上合計と順位指定のクエリ

このQ&Aのポイント
  • Accessのクエリを使用して、期間を指定した顧客の売上を合計する方法について教えてください。
  • また、売上の合計に基づいて指定した順位のデータを抽出する方法も知りたいです。
  • DCount関数を使用して順位を求めたがエラーが発生してしまいます。金額の集計方法が問題なのか教えてください。
回答を見る
  • ベストアンサー

Accessで期間指定の売上合計と順位指定のクエリ

Accessのクエリの質問です。 (1)期間を指定した、顧客の売上を合計。 (2)その順位を出し、1位~100位や250位などの順位を指定した抽出をしたいです。 (1)期間指定の売上合計はできています。 (2)の順位をDCountでしましたが、金額(集計:合計)にしているためか構文エラーがでます。 よろしくお願い致します。 ------------------------------------------------ 2つのテーブルから、Q_売上(クエリ)を作成しました。 tbl顧客 顧客番号 顧客名 tbl販売 販売番号 日付 顧客番号 金額 Q_売上 日付(集計:Where条件) 顧客番号(集計:グループ化) 顧客名(集計:グループ化) 金額(集計:合計) 日付の抽出条件は、 Between [開始] And [終了] としています。 ------------------------------------------------

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No2です。訂正があります。 フィールド  │ 順位:顧客番号  │ 金額の合計    │ 顧客番号 テーブル   │ Q_売上_1    │ Q_売上_1      │ Q_売上_1 集計     │ カウント    │ Where条件     │ Where条件 並べ替え   │ 表示     │  チェックあり │ チェックなし    │ チェックなし 抽出条件   │>[抽出順位]  │>[Q_売上]![金額の合計] │ または    │        │            │[Q_売上]![顧客番号] のところで、 抽出条件   │>[抽出順位]  │>[Q_売上]![金額の合計] │ において、>[抽出順位] の不等号の向きが反対で、かつ不等号が 抜けていました。     <=[抽出順位] のように、してください。したがって、 フィールド  │ 順位:顧客番号  │ 金額の合計    │ 顧客番号 テーブル   │ Q_売上_1    │ Q_売上_1      │ Q_売上_1 集計     │ カウント    │ Where条件     │ Where条件 並べ替え   │ 表示     │  チェックあり │ チェックなし    │ チェックなし 抽出条件   │<=[抽出順位]  │>[Q_売上]![金額の合計] │ または    │        │            │[Q_売上]![顧客番号] となります。 欠番があった場合はNo2の説明の通りです。 したがって、クエリのSQLビューも以下になります。 SELECT Q_売上.顧客番号, Q_売上.顧客名, Q_売上.金額の合計, Count(Q_売上_1.顧客番号) AS 順位 FROM Q_売上, Q_売上 AS Q_売上_1 WHERE (((Q_売上_1.金額の合計)>[Q_売上]![金額の合計])) OR (((Q_売上_1.顧客番号)=[Q_売上]![顧客番号])) GROUP BY Q_売上.顧客番号, Q_売上.顧客名, Q_売上.金額の合計 HAVING (((Count(Q_売上_1.顧客番号))<=[抽出順位])); また、説明の途中の    >[抽出順位] のところも、    <=[抽出順位] におきかえてください。 Between [最初の順位] And [最終順位] とする場合は、変更はありません。失礼しました。 たぶん、もう間違いはないと思いますが。

yy-sakura
質問者

お礼

piroin654 様 2回も、回答をありがとうございます。 前回も回答を下さった方ですね。 お世話をかけました。 こちらの方法は、質問する前にネットにて調べて試していました。 私が試した時は、ならなかったので、こちらに質問しました。 フィールドへの書き込み方が違っていました。 親切に書いてあったので、手順どおりに進めたら完成しました。 Between [最初の順位] And [最終順位] でも出したい時がありますので、とても助かります。

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

新しいクエリに、テーブルとして[Q_売上]を二つ追加します。 一つは、[Q_売上]、もう一つは[Q_売上_1]という名前に 設定されます。 クエリのフィールドに、顧客番号、顧客名、金額の合計の フィールドを設定し、Σを押して集計を設定します。 空いているフィールドに次のように設定します。 なお、金額の合計、顧客番号は[Q_売上_1]のフィールドであって、 [Q売上]のフィールドではないことに注意をしてください。 フィールド  │ 順位:顧客番号  │ 金額の合計    │ 顧客番号 テーブル   │ Q_売上_1    │ Q_売上_1      │ Q_売上_1 集計     │ カウント    │ Where条件     │ Where条件 並べ替え   │ 表示     │  チェックあり │ チェックなし    │ チェックなし 抽出条件   │>[抽出順位]  │>[Q_売上]![金額の合計] │ または    │        │            │[Q_売上]![顧客番号] 気をつけるのは顧客番号の抽出条件が金額の合計とずれていて [または]のところに設定されていることです。 また、同一順位が複数ある場合には次の順位が欠番に なります。たとえば1位が3人いた場合は、次の順位は 4位になります。クエリのSQLビューでは、 SELECT Q_売上.顧客番号, Q_売上.顧客名, Q_売上.金額の合計, Count(Q_売上_1.顧客番号) AS 順位 FROM Q_売上, Q_売上 AS Q_売上_1 WHERE (((Q_売上_1.金額の合計)>[Q_売上]![金額の合計])) OR (((Q_売上_1.顧客番号)=[Q_売上]![顧客番号])) GROUP BY Q_売上.顧客番号, Q_売上.顧客名, Q_売上.金額の合計 HAVING (((Count(Q_売上_1.顧客番号))>[抽出順位])); のように表示されるはずです。 また、[順位:顧客番号]のフィールドの抽出条件に    >[抽出順位] としていますが、これだとたとえばパラメータの入力で 100とすれば1位から100までが表示されますが、ここを    Between [最初の順位] And [最終順位] にすれば、任意の順位間を表示することができます。 つまり、パラメータの入力で100と200をそれぞれ 入力すると100位から200位が表示されます。 1と1を入力すると1位が表示されます。ただし、たとえば50位を表示する場合、 パラメータで50と50を入力しますが、 たまたま、49位が複数いた場合は、50位は欠番になるので50位は表示されない ことになります。同様に、1位から50位まで表示する場合、上記の場合に 1位から49位までが表示されることになります。欠番が生じる場合は、 [順位:顧客番号]のフィールドの抽出条件に    >[抽出順位] とした場合も同様です。 クエリのSQLビューでは SELECT Q_売上.顧客番号, Q_売上.顧客名, Q_売上.金額の合計, Count(Q_売上_1.顧客番号) AS 順位 FROM Q_売上, Q_売上 AS Q_売上_1 WHERE (((Q_売上_1.金額の合計)>[Q_売上]![金額の合計])) OR (((Q_売上_1.顧客番号)=[Q_売上]![顧客番号])) GROUP BY Q_売上.顧客番号, Q_売上.顧客名, Q_売上.金額の合計 HAVING (((Count(Q_売上_1.顧客番号)) Between [最初の順位] And [最終の順位])); のように、表示されるはずです。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

順位とは何か? 自分と比べて金額の多い人が何人いるか、で 決まりますね。つまり、自分より金額の多い レコードの個数が順位です。 クエリのSQLは以下のようになります。 SELECT A.顧客番号, ,MAX(A.顧客名) AS 名前 ,MAX(A.金額) AS 売上高 ,COUNT(B.顧客番号) AS 順位 FROM Q_売上 AS A LEFT JOIN Q_売上 AS B ON A.金額<=B.金額 GROUP BY A.顧客番号 ORDER BY COUNT(B.顧客番号) 上記はAが主体です。Aのある人から見て、 金額が同じ以上の人のカウントが順位です。 トップなら、B側で一致するレコードは自分自身の 1レコードだけなので、COUNTは1です。 2番目なら1番の人と、自分で合計は2です。 同じ金額の人がいると、順位は抜け番になります。 同額トップが2人いると、1位はなく、2位が2人 となります。 SQLの結合式が等号でないため、ビルダでは 作れません。SQLビューで直接SQLを書き込み ます。

yy-sakura
質問者

お礼

nda23 様 回答ありがとうございます。 フォームの入力で回答を下さったかたですね。 SQL構文が似ています。 私が前回の回答を理解していれば、解決したかもしれません。 お世話をかけました。 1位から順位を出すときは、こちらの構文が短くてすっきりしています。 piroin654 様 はビルダで作成、nda23 様 は直接書く。 とても参考になります。

関連するQ&A

  • Accessのクエリ。日付と顧客で売上合計をだす。

    期間を指定して、顧客の売上を合計したいです。 2つのテーブルからクエリを作成しました。 tbl顧客 顧客番号 顧客名 tbl販売 販売番号 日付 顧客番号 金額 Q_売上 日付 顧客番号 顧客名 金額 ∑をクリックして、金額の集計は[合計]にしています。 その他は、[グループ化]です。 日付の抽出条件は、 Between [開始] And [終了] としています。 顧客毎に合計を出したいです。 よろしくお願い致します。

  • Access ユニオンクエリについて・・・・

    顧客管理作成中です。 テーブル:顧客dataの項目(フィールド名)に 顧客名をはじめとして、 入金予定日,入金予定額,入金日,入金額,クレジット入金日,クレジット入金額とあります。 それぞれ、日付が違うのですが、日々の流れをチェックできるよう、 日付でまとめたいのです(日々の金額は日計) 希望の形は 日付 入金予定額   入金額   クレジット入金額 11/1  11/2 11/3   ・   ・   ・ _____________________ 月合計 _____________________ 全体合計 まず、グループ化したクエリを3つ作り、その後 ユニオンクエリを作って見ましたが、合計の作り方がわかりません。 ★作成状況★ ■グループ化した3つのクエリを作成 (1)Q名・支払予定金額(入金予定日,入金予定額の合計) (2)Q名・入金     (入金日,入金額の合計) (3)Q名・クレジット   (クレジット入金日,クレジット入金額の合計) ■ユニオンクエリ SELECT 日付,支払予定金額の合計,0 as 金額の合計,0 as クレジット入金額の合計 FROM 支払予定金額 UNION SELECT 日付,0 as 支払予定金額の合計,金額の合計,0 as クレジット入金額の合計 FROM 入金 UNION SELECT 日付,0 as 支払予定金額の合計,0 as 金額の合計,クレジット入金額の合計 FROM クレジット; はじめて、ユニオンクエリを使ったので、わからないことだらけです。。。 どなたか手を貸してください(-"-;) 宜しくお願いいたします

  • アクセス クエリ・集計・計算方法について

    アクセスの集計機能を使用して、品名毎の数量の合計と金額の合計を算出しようとしていますが、 思うようにできません。どなたか教えてください。 クエリのフィールドを左から・・・ (1)年月: Format([日付],"yyyy/mm")(集計:グループ化) (2)品名(集計:グループ化) (3)品名のカウント(集計機能:カウント) (4)単価(集計:グループ化) (5)金額: [単価]*[品名のカウント](集計:グループ化) このような形でクエリを実行していますが、すべての注文が1つだけなら問題ないのですが、実際には品名には数量が掛けられている場合もあり、現在設定しているクエリ設定では正しい数量の合計と金額の合計を出すことができません。どうか集計方法をご教授いただけないでしょうか。よろしくお願いします。 ■現在のテーブルの設計とリレーションを明記します。 【A】顧客テーブル (1)顧客ID (2)発注コード (3)氏名 【B】商品テーブル (1)商品ID (2)品名 (3)単価 【C】注文テーブル (1)注文ID (2)日付 (3)顧客ID 【D】注文明細テーブル (1)注文明細ID (2)注文ID (3)商品ID (4)数量 リレーション 【A】(1)-【C】(3) 【B】(1)-【D】(3) 【C】(1)-【D】(2)

  • 指定日までの売上合計を別シートに抽出したい。

    指定日までの売上合計を別シートに抽出したい。 添付図左側(Sheet1)に指定した日までの売上合計を出したいのです。 Sheet2でA店の売上と客数を入力していきます。 Sheet3はB店、Sheet4はC店、・・・・と続き、それぞれに売上と客数を入力します。 Sheet1のB3に「15」(2010/5/15の意)と入力します。 すると、C5に1日~15日までの合計売上金額が抽出されるようにしたいのです。 B3の表示形式は、ユーザー定義で「d」にしています。 どうかよろしくお願いいたします。

  • DCOUNT関数がなぜかカウントしない

    DCOUNT関数を使って顧客のデータから来店回数を抽出しようとしているのですが、エラーは出ないのですが、なぜかどの客も来店回数が0なのです。 顧客データがにはちゃんと来店日、売上などがかいていあるのですけど… DCOUNT関数のdatabaseに顧客の全データ(顧客の来店などのデーターを含む)のシート全体を指定して、フィールドに「ID番号」(顧客の)の列を指定して、クリテリアには集計するID番号の顧客ID番号を入力しています。 数字は出てくるんですが、どの顧客も来店回数0です。 エクセル2000を使っています。 なぜ、うまく計算されないのかさっぱり分かりません。 よろしくお願いします。

  • Access クエリの抽出方法について

    Accessでのクエリの利用方法についての質問です。 日付-------名前--売上 2004/12/1 XXX 1000 2004/12/2 YYY 1500 2004/12/3 XXX 5000 2004/12/4 YYY 6000 以上の様な場合、XXXの人の売上の合計、YYYの人の売上の合計をそれぞれ集計することは可能なのでしょうか? できれば日付指定をして、その中でデータを出せればと思っています。 かなり初歩的な質問だとは思いますが、宜しくお願いします。

  • 合計を求めるクエリーについて

    1日から30日の間に誰が何のパンを何個売ったのかを調査できるようなデータベースを作ってみました。 クエリーの抽出条件はBetween「○○○」And「○○○」で日付で指定するようにしました。 (日付ですがデータ型はテキスト型です) 該当するレコードが30件あったとすると30件のレコードが抽出されますが、この期間内に誰が何のパンを何個売ったかの合計がわかるようにするにはどうすればいいのでしょうか? なんかうまく説明できなくてすみませんが教えてください。 よろしくお願いいたします。

  • 期間を指定しての合計の抽出方法

    A表を基にB表の売上欄N2に商品毎に指定した期間の売上合計を抽出させたいのですがどのような数式にすればいいのでしょうか。

  • Access クエリで、レコードの無い日付も出力したい

    売上テーブル 日付   名前 金額 2007/01/01 A 100 2007/01/02 B 200 2007/01/05 C 500 2007/01/05 A 500 希望するクエリ結果 日付  件数 売上高 2007/01/01 1 100 2007/01/02 1 200 2007/01/03 0  0 << これを表示したい 2007/01/04 0  0 << これを表示したい 2007/01/05 2 1000 売上.日付 でグループ化すると、レコードの無い日付が表示されません。 集計期間内の全日付が表示されるようにするには、どうすればよいのでしょうか? 別に日付テーブルを作らなければならないのでしょうか?

  • Access クエリとテーブルの合計値を一緒に表示

    クエリの合計値と親テーブルの合計値をフォーム上にて表示したいのですが、 うまく行かずに困っています。 クエリにて抽出した値の合計 Sum([Q抽出クエリ],[利用金額]) と、 抽出前の合計 Sum([T検索履歴],[利用金額]) を両方表示させたいです。 現状は下記の通りです。 ■使用テーブル・使用クエリ テーブル  [T検索履歴] ------- フィールド [検索履歴ID] [キーワード] [利用金額] クエリ   [Q抽出クエリ] …T検索履歴から特定のキーワードを含むレコードを抽出 フィールド [検索履歴ID] [キーワード] [利用金額] ■フォーム フォームのレコードソース … [Q抽出クエリ] ■現状と問題点 (1)[Q抽出クエリ]にて、キーワード『保護』を含むレコードを抽出します。 (2)抽出されたレコードの[利用金額]を、非連結テキストボックス tBox1 に表示します。 式:tBox1のコントロールソース =Sum([利用金額数]) (3)全体の利用金額合計を知るために、 [T検索履歴]の[利用金額]の合計値を非連結テキストボックス tBox2 に表示させます。 (ここが望む結果になりません。) 式:tBox2のコントロールソース =Sum([T検索履歴],[利用金額数]) 実行した結果 tBox1 … 抽出されたレコードの[利用金額]合計を表示 tBox2 … 上に同じ 望んだ結果 tBox1 … 抽出されたレコードの[利用金額]合計を表示 tBox2 … [T検索履歴] の[利用金額]合計を表示 以上、どうしたら良いのか分からず困っています。 宜しくお願い申し上げます。