プロが教える店舗&オフィスのセキュリティ対策術

たとえば、商品の値段をDB化するときに

 テレビ 30000
 カメラ 20000
 ラジカセ 4000
  ・
  ・

みたいなテーブルがあったとして、

グループ化を
 グループA 9999円以下
 グループB 10000円以上19999円以下
 グループC 20000円以上49999円以下
 グループD 50000円以上
みたいな感じでグループ化して、グループごとの商品数を
クエリで求めたいとした場合、できるだけシンプルに分かりやすく
実現する方法はありますでしょうか?

グループ化の基準を別テーブルで持たせることを考えたのですが、
その後に行き詰ったりしてしまいました。

今のところ4つしかグループはないので、中間クエリを作って、
新規のフィールドに、
 iif(price<5000,"グループA",iif(price<10000,"グループB",iif...
という感じにして、そのクエリを元にクエリを作ればいけるかなーと
思ってますが(未確認)、あまり、キレイじゃないのと、
グループ数が増えるとより見づらくなりそうで、
もうちょっとキレイな方法があればと思ってます。
グループ化の基準は別テーブルで持ちたいですが、持った後が考え付かず、、

いい方法をご存知の方教えてください。

A 回答 (1件)

もう解決されましたか



以下に1つの例を (以下 an はオートナンバー)


商品のテーブル名を「T1」とし、構成が、an, 商品名, 価格 とします。

テーブルサンプル
an  商品名  価格
1  テレビ  \30,000
2  カメラ  \20,000
3  ラジカセ  \4,000

グループのテーブル名を「T2」とし、構成が、an, ランク名, 下限 とします。

テーブルサンプル
an  ランク名  下限
1  グループA  \0
2  グループB  \10,000
3  グループC  \20,000
4  グループD  \50,000


クエリのSQLビューで、以下を記述(もっといい方法があるかと思いますが)

SELECT (SELECT TOP 1 ランク名 FROM T2 WHERE 下限 <= T1.価格 ORDER BY 下限 DESC) AS グループ, 商品名, 価格 FROM T1;

表示結果が以下
グループ  商品名  価格
グループC  テレビ  \30,000
グループC  カメラ  \20,000
グループA  ラジカセ  \4,000


後は、このクエリをもとに集計するとか・・・


(SELECT TOP 1 ランク名 FROM T2 WHERE 下限 <= T1.価格 ORDER BY 下限 DESC) AS グループ
部分は、テーブルT2から、価格以下の下限を降順で並べた時の先頭のランク名を得る
というものになります。

DLookup / DMax を使って置き換えてみると
DLookup("ランク名","T2","下限 = " & DMax("下限","T2","下限 <= " & [価格])) AS グループ
になると思います。
    • good
    • 0
この回答へのお礼

まだ解決しておらず、とりあえずIIF関数でやってました。
TOP1というのは知りませんでした。
これを使えば、グループ情報を他テーブルでもてますね。

回答ありがとうございました。

お礼日時:2009/12/07 06:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!