ACCESS2007でイレギュラーなグループ化は可能ですか?

このQ&Aのポイント
  • 商品の値段をDB化する際に、テレビ、カメラ、ラジカセなどの商品をグループ化したい場合、ACCESS2007で実現する方法について教えてください。
  • 現在の方法では中間クエリを作成し、条件に基づいてグループを設定する方法を考えていますが、もっとシンプルで見やすい方法があれば知りたいです。
  • また、グループ化の基準を別のテーブルで管理する方法についても教えてください。
回答を見る
  • ベストアンサー

ACCESS2007でイレギュラーなグループ化は可能ですか?

たとえば、商品の値段をDB化するときに  テレビ 30000  カメラ 20000  ラジカセ 4000   ・   ・ みたいなテーブルがあったとして、 グループ化を  グループA 9999円以下  グループB 10000円以上19999円以下  グループC 20000円以上49999円以下  グループD 50000円以上 みたいな感じでグループ化して、グループごとの商品数を クエリで求めたいとした場合、できるだけシンプルに分かりやすく 実現する方法はありますでしょうか? グループ化の基準を別テーブルで持たせることを考えたのですが、 その後に行き詰ったりしてしまいました。 今のところ4つしかグループはないので、中間クエリを作って、 新規のフィールドに、  iif(price<5000,"グループA",iif(price<10000,"グループB",iif... という感じにして、そのクエリを元にクエリを作ればいけるかなーと 思ってますが(未確認)、あまり、キレイじゃないのと、 グループ数が増えるとより見づらくなりそうで、 もうちょっとキレイな方法があればと思ってます。 グループ化の基準は別テーブルで持ちたいですが、持った後が考え付かず、、 いい方法をご存知の方教えてください。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.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 グループ になると思います。

seiiiichi
質問者

お礼

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

関連するQ&A

  • グループ集計のカウントについて access2003

    テーブル1からクエリ結果1を得たいのですが、 どのようにすればよろしいでしょうか? テーブル NO Q1 Q2 A  3 2 A  2 2 A  1 3 B  2 2 B  1 2 クエリ結果 NO Q1A1 Q1A2 Q1A3 Q2A1 Q2A2 Q2A3  総数 A  0   1  1   0  2   0   3 B  1   1  0   0  2   0   2 NOの集計をグループ化し、 総数はフィールドを 総数: Count([Q1]) とすれば 表示できるのですが、中の6つのフィールドの設定が わかりません。 よろしくお願いいたします。 ------------- テーブルの説明 商品AとBに対するアンケートデータベース 質問文は2問(Q1とQ2)で1から3の3択 クエリ結果の説明 Q1A1は質問Q1で1と回答した人の数 総数は商品に対するレコード数

  • アクセスについて

     *テーブルB    *テーブルA      店番←------販売店番号       店名       商品番号                 販売金額    *テーブルC             商品番号----→商品番号            詳細       商品名            販売日      手数料 リレションシップをしております。 クエリA 店名-商品番号-販売金額-商品名-詳細-手数料金額-販売日 といったクエリをつくりました。 ---------OKウェーブさんからの回答--------------- 「商品」テーブルに 店名 - 商品 - 金額 A店 - 宝石 - 1000 B店 - 時計 - 2000 A店 - 宝石 - 3000 B店 - バック - 4000 ・・・ と格納されているとします で、これらを集計する為に使用するものは、選択クエリ(集計)を使用します 下記にクエリのSQL文を記述します SELECT 商品.店名, Sum(IIf([商品名]="宝石",[金額],0)) AS 宝石合計, Sum(IIf([商品名]="その他",[金額],0)) AS その他合計, Sum(商品.金額) AS 合計, Sum(IIf([商品名]="バック",[金額],IIf([商品名]="時計",[金額],0))) AS 合計A, Sum(IIf([商品名]="その他",[金額],IIf([商品名]="宝石",[金額],0))) AS 合計B FROM 商品 GROUP BY 商品.店名 ORDER BY 商品.店名; ------------------------------------------------- どこの画面でSQL文を記述すえばよろしいのでしょうか。 どこかわかりやすいHPはないでしょうか お願いします。

  • Accessクエリでのグループ化

    Accessクエリでのグループ化 以下の2つのテーブルが有ります。 ■社員テーブル ID 名前 1 Aさん 2 Bさん 3 Cさん 4 Dさん 5 Eさん ■受付テーブル ID 受付内容 受付日   社員ID 1  xxxxx 2010/3/1   1 2 xxxxx 2010/3/20   3 3 xxxxx 2010/4/10   2 4 xxxxx   2010/4/11  5 5 xxxxx 2010/4/15  1 6 xxxxx 2010/4/30  2 7 xxxxx 2010/5/3  4 そこで社員毎の受付数をカウントしたいと思っています。 ※受付日が2010/4/1以上5/1未満 名前 受付回数 Aさん 1 Bさん 2 Cさん 0 Dさん 0 Eさん 1 となるイメージです。 しかし、実際にクエリを作ると結果が 名前 受付回数 Aさん 1 Bさん 2 Eさん 1 と、なってしまいます。。 名前:グループ化 受付テーブルのID:カウント 受付日:>=2010/04/01 and <2010/05/01 ※社員テーブルの『ID』と、受付テーブルの『社員ID』を  紐つけており、結合プロパティでは『社員テーブルの  全レコードと受付テーブルの同じ結合フィールドのレコード  だけを含める』としております。 あらかじめ、受付テーブルで受付期間の条件でクエリ を作成しておき、それと社員テーブルを紐つけた場合は イメージ通りの結果になるのですが、1つのクエリで 上記イメージでの結果を表示したいと思ってます。 可能でしょうか? ご教授願います。

  • ACCESSのレポート合計について

    いつも大変お世話になっております。 すみませんが、長くなりそうなので例えて説明します。 早速ですが以下のようなクエリでAで結合し、C列抽出してレポートでBの合計を得ようとしています。 テーブル1  テーブル2 A――――――――A       A:商品          |             |        B:金額       ―B →10円    ―C       C:商品名 A            A |             | ―B →10円     ―C ――――↓――  合計 10円 グループ化してもテーブル2はA-Cが重複している為、グループ化できません。テープル2は主キーをとっていますがなぜか重複行ができる時があるのです。(いちいち探して消したりするのが手間がかかってしまう) レポート出力時合計を出すとして重複しているとまずいので20円ではなく10円と出す方法はありますか?? 長くなりましたが、宜しくお願いします。   

  • ACCESS 教えて下さい

    前も似たような質問をしたのですがうまく応用が出来なかったので再度ご教授お願い致します。 テーブルA 商品NO SS  S   A   B   C A001  1000 2000 3000 4000 5000 A002   500 700 800  900 950 A003  1500 2500 3000 4500 5500 テーブルB 会社名 会社ランク AAA  SS BBB  S CCC  A があります。 二つをくっつけて受注管理のクエリをつくりました クエリA 購入日 会社名 会社ランク 商品NO 金額 この中で AAAの会社がA001の商品を買ったら金額欄に1000 BBBの会社がA002を買ったら  700 と表示させたくて、 クエリAの金額欄に 金額: IIf([会社ランク]=A,(SELECT A FROM テーブルA WHERE 商品No = 商品No),IIf([会社ランク]=SS,(SELECT SS FROM テーブルA WHERE 商品No = 商品No),IIf([会社ランク]=S,(SELECT S FROM テーブルA WHERE 商品No = 商品No),0))) としたのですが、できません。 間違いのご指摘と、どうすればよいかを教えて下さい。 宜しくお願い致します。

  • Access フィールドから値を取り出す

    お世話になります。 ・テーブル 会員番号(テキスト),商品名(テキスト),売上数(数値) 「商品名」には商品Aと商品Bがあります。 会員番号ごとに商品Aと商品Bそれぞれの売上数を分けて表示したいです。 ・クエリ SELECT 会員番号,商品A,売上数A,商品B,売上数B WHERE テーブル.商品名 = "商品A" = 商品A AND テーブル.商品名 = "商品B" = 商品B FROM テーブル GROUP BY 会員番号,商品A,売上数A,商品B,売上数B; 会員番号ごとに並べたいので、クエリをグループ化したところ、 会員番号「1」の商品Aは3件、商品Bは10件だった場合の結果として ---------------------------- 会員番号,商品A,売上数A,商品B,売上数B 1,商品A,3,商品B,3 1,商品A,10,商品B,10 ---------------------------- このように会員番号が重複して表示されてしまいます。 欲しい結果 ---------------------------- 会員番号,商品A,売上数A,商品B,売上数B 1,商品A,3,商品B,10 ---------------------------- 同一の会員番号につき、商品と売上数を1行でまとめられないでしょうか。 どうぞよろしくおねがいいたします。

  • ACCESS 比較後の抽出

    テーブル1 a_b テーブル2 c_d クエリ1 a&b:[a]+[b] c&d:[c]+[d] クエリでiif([a&b]=[c&d],"○","×") としたとき抽出条件に○としてもパラメータクエリが出てしまいます。 サブクエリを使うのでしょうが今一使い方が分かりません。 ご教授お願いします。

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

    毎度お世話になっております。 ACCESS2003、SQLSERVER2000を使用しています。 以下のテーブルがあります。 テーブル1 フィールド1   フィールド2   A        10   A        20   A        -10   B         1   B         2   B         3 フィールド1をグループ化し、 フィールド2に0より小さい数がある場合はNG、 ない場合はOKと表示したいのです。 希望する結果 フィールド1   フィールド2   A         NG   B         OK 私が考えた方法は、 1.クエリ1(フィールド2が0以下のフィールド1を抽出する)を作成 2.テーブル1とクエリ1をLEFT JOINし、IS NULL ならOK、そうでないならNGを表示 としました。希望した結果は得られましたが、 もっとスマートな方法(一つのクエリでできるような方法)、 または別解をご教授ください。 よろしくお願いします。

  • ACCESSについて

    Accessで以下のように処理したいのですが、方法を教えてください。 下記のように2つのテーブル1、2があり、それぞれ一つずつの項目(A、B)があります。 テーブル1  テーブル2  項目A    項目B  001     002  002     004  005     006  006     007  008     008 これをクエリーを使って、 クエリー0  テーブル1.項目A  テーブル2.項目B     001     002        002               004     005     006        006               007     008        008 と表示させたいのですが、どうしたらいいでしょうか?

  • Access #エラーについて

    Access初心者です。 よろしくお願いいたします。 [前提]  テーブルA のIDに紐づけてクエリBの数値をクエリCで反映させたい。  〈詳細データ〉   ・テーブルA    [ID] [名称]       1   あ     2   い     3   う     4   え     5   お   ・クエリB    [ID] [数値]     2   10     3   20     5   40   ・クエリC    [ID]  [名称] [数値]     1    あ  #エラー     2    い   10     3    う    20     4    え  #エラー     5    お   40   ・”テーブルAの[ID]”の全レコードと”クエリBの[ID]”の同じ結合フィールドだけを含めてリレーションを行っている。    ・クエリCの算式: IIf(IsError([クエリB].[数値]),0,[クエリB].[数値])  [質問]    ・クエリCの『#エラー』部分を0にしたいのですが、何か良い方法はございませんでしょうか。   ・そもそも上記のロジックは無理がありますでしょうか。    アクセスはあまりいじったことがございません。ご回答いただけますと幸いです。   よろしくお願いいたします。

専門家に質問してみよう