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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
Access サブフォームでの選択行の取得
その他(データベース)
-
アクセスでの抽出方法(日付+時刻)
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01722: 数値が無効です
-
項目名の制限について
-
フォームで検索 エラーの表示...
-
MySQLで改行を含む文の登録のし...
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルグラフの凡例スペース
-
変数が選択リストにありません
-
テーブルの存在チェックについて
-
Accessでテーブル名やクエリ名...
-
Oracle 2つのDate型の値の差を...
-
Access テキスト型に対する指定...
-
Accessのフィールド数が255しか...
-
SUBSTRING 関数に渡した長さの...
-
SQLServer2005のSQL文での別名...
-
ACCESSのクエリで集計で、先頭...
-
Access2000のフォームで
-
エクセルVBAで5行目からオート...
-
作番ってどういう意味でしょうか?
-
アクセス エラーを数値「0」に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
項目名の制限について
-
SQLでグループ化した結果の件数...
-
ORA-01722: 数値が無効です
-
MySQLで改行を含む文の登録のし...
-
改行コードを削除して取得する...
-
フォームで検索 エラーの表示...
-
SQL文の書き方
-
Accessで期間指定の売上合計と...
-
データベースから抽出した一覧...
-
列名無効について
-
オラクルSQLの累計値取得方法に...
-
SQL抽出方法:売上Tを集計した...
-
SQL文 2つのテーブルから、グ...
-
集計のSQLをお教え下さい
-
SQLを教えて下さい
-
縦表示データを列として取得す...
-
SQLでNOT INと!=ALLの違い
-
インサート文での条件の指定に...
-
SQL抽出方法に悩んでいます② 続...
-
他のテーブルの抽出条件で更新...
おすすめ情報