Accessのクエリの質問です。
(1)期間を指定した、顧客の売上を合計。
(2)その順位を出し、1位~100位や250位などの順位を指定した抽出をしたいです。
(1)期間指定の売上合計はできています。
(2)の順位をDCountでしましたが、金額(集計:合計)にしているためか構文エラーがでます。
よろしくお願い致します。
------------------------------------------------
2つのテーブルから、Q_売上(クエリ)を作成しました。
tbl顧客
顧客番号
顧客名
tbl販売
販売番号
日付
顧客番号
金額
Q_売上
日付(集計:Where条件)
顧客番号(集計:グループ化)
顧客名(集計:グループ化)
金額(集計:合計)
日付の抽出条件は、
Between [開始] And [終了]
としています。
------------------------------------------------
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 [最終順位]
とする場合は、変更はありません。失礼しました。
たぶん、もう間違いはないと思いますが。
piroin654 様
2回も、回答をありがとうございます。
前回も回答を下さった方ですね。
お世話をかけました。
こちらの方法は、質問する前にネットにて調べて試していました。
私が試した時は、ならなかったので、こちらに質問しました。
フィールドへの書き込み方が違っていました。
親切に書いてあったので、手順どおりに進めたら完成しました。
Between [最初の順位] And [最終順位]
でも出したい時がありますので、とても助かります。
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 [最終の順位]));
のように、表示されるはずです。
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を書き込み
ます。
nda23 様
回答ありがとうございます。
フォームの入力で回答を下さったかたですね。
SQL構文が似ています。
私が前回の回答を理解していれば、解決したかもしれません。
お世話をかけました。
1位から順位を出すときは、こちらの構文が短くてすっきりしています。
piroin654 様 はビルダで作成、nda23 様 は直接書く。
とても参考になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- Excel(エクセル) エクセルでSUMIFS関数で条件範囲の部分が#valueになる。 4 2023/04/28 12:42
- コンサルティング・アドバイザー 事業戦略策定のときの現状分析(3C)の手順について 1 2022/07/24 14:36
- Excel(エクセル) Excelで、別シートへ情報を参照表示する関数について。 2 2023/06/26 09:58
- 財務・会計・経理 減価償却について 3 2022/05/26 00:49
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- 政治 日本で訴訟件数が少ないのは、自民党とビッグモーターが詐欺組織だからですか? 2 2023/07/27 11:30
- 法人税 浄水器レンタル 経理処理 1 2023/06/29 17:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLでグループ化した結果の件数...
-
項目名の制限について
-
MySQLで改行を含む文の登録のし...
-
Accessで複数テーブルのJoin
-
列名無効について
-
SQLを教えて下さい
-
SQL抽出方法に悩んでいます④
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Accessでテーブルの値をテキス...
-
作番ってどういう意味でしょうか?
-
Accessでテーブル名やクエリ名...
-
ACCESSのクエリで集計で、先頭...
-
Access テキスト型に対する指定...
-
accessのレポートで元になるテ...
-
テーブルの存在チェックについて
-
Accessのリンクテーブルのパス...
-
セルの右クリックで出る項目を...
-
Accessクエリーで両方のテーブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MySQLで改行を含む文の登録のし...
-
項目名の制限について
-
SQLでグループ化した結果の件数...
-
ORA-01722: 数値が無効です
-
列名無効について
-
フォームで検索 エラーの表示...
-
オラクルSQLの累計値取得方法に...
-
SQL文のエラーについて
-
縦表示データを列として取得す...
-
♪Oracle SQL 処理が成功した時...
-
SQLでNOT INと!=ALLの違い
-
アクセスのクエリについて(前...
-
Accessで期間指定の売上合計と...
-
改行コードを削除して取得する...
-
SQL文 2つのテーブルから、グ...
-
Oracleでテーブルの結合について
-
以下のようなSQLについて教えて...
-
LEFT JOINとRIGHT JOINについて
-
SQL文(県名一覧・・)
-
SQL文の書き方
おすすめ情報