Accessフィールドから値を取り出す方法とは?

このQ&Aのポイント
  • Accessフィールドから値を取り出す方法について詳しく教えてください。
  • 会員番号ごとに商品Aと商品Bの売上数を分けて表示する方法について教えてください。
  • クエリをグループ化して会員番号ごとにまとめた場合に、重複表示が起きる問題について解決方法を教えてください。
回答を見る
  • ベストアンサー

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行でまとめられないでしょうか。 どうぞよろしくおねがいいたします。

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

クロス集計クエリではダメなの? TRANSFORM Sum([売上数]) AS 売上数の合計 SELECT [会員番号], Sum([売上数]) AS [合計 売上数] FROM テーブル GROUP BY [会員番号] PIVOT [商品名]; ダメならこんなのでも・・・。 SELECT 会員番号, "商品名A" AS 商品名A, Sum(IIf([商品名]='商品A',1,0)*[売上数]) AS 商品名A数, "商品名B" AS 商品名B, Sum(IIf([商品名]='商品B',1,0)*[売上数]) AS 商品名B数 FROM テーブル GROUP BY 会員番号, "商品名A", "商品名B";

semi076
質問者

お礼

御礼が遅くなりまして申し訳ございません。 アドバイスいただいたとおり、 クロス集計で出すのが、一番期待通りの形になりました。 このたびはどうもありがとうございました。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

未試験なのでちょっとおかしいかも。 select tbl1.会員番号, tbl2.商品 as 商品A, tbl2.売上数A as 売上数A, , tbl3.商品 as 商品B, tbl3.売上数 as 売上数B from (テーブル as tbl1 left join (select 会員番号, 商品, sum(売上数) from テーブル where 商品名 = "商品A" group by 会員番号) as tbl2 on tbl1.会員番号 = tbl2.会員番号) left join (select 会員番号, 商品, sum(売上数) from テーブル where 商品名 = "商品B" group by 会員番号) as tbl3 on tbl1.会員番号 = tbl3.会員番号 ;

semi076
質問者

お礼

御礼が遅くなりましてすいませんでした。 ご回答いただきありがとうございます。 やりたいことはいただいたSQLの通りなのですが、 試してみたところ、「あいまいな外部結合」とのエラーが出てしまいました。 すぐに結果をお知らせできず、申し訳ありません。

関連するQ&A

  • Access 項目ごとにフォールド全データ表示

    Access2010で質問です。 よろしくお願いいたします。 Tabにある顧客番号フィールド全てに対して、 商品番号ごとに、実績が無いデータも表示させたいです。 --------------------- ・Tab(顧客情報テーブル) 顧客番号 顧客名 ・Q1(売上実績クエリ) 顧客番号, 商品名(抽出条件 Forms![フォーム1]![商品番号] Or Forms![フォーム1]![商品番号2] ) 売上実績 ・Q2(完成クエリ) 顧客番号,商品名,売上実績 1 ,商品A ,0 2 ,商品A ,2 3 ,商品A ,10 1 ,商品B ,1 2 ,商品B ,0 3 ,商品B ,5 --------------------- 選択クエリでTabフィールドを全て表示させるように結合させると、 --------------------- ・Q2(完成クエリ) 顧客番号,商品名,売上実績 1 ,商品B ,1 2 ,商品A ,2 3 ,商品A ,10 3 ,商品B ,5 --------------------- という表示になりますが、 顧客番号×商品数(A、B)のデータ数を出したいです。 単純に商品名ごとにTabとQ2結合クエリを作成し、 後でまとめるという方法もありますが、 Q1「商品名」の抽出条件は今後増える予定があるため、 できるだけ少ない数のクエリで処理できるようにしたいと思っています。 もしお分かりになれば、教えていただけないでしょうか。 どうぞよろしくお願いいたします。

  • アクセスのデータ抽出

    現在テーブルA(支店コード、支店名、郵便番号、住所)とテーブルB(支店コード、社員番号、商品Aの売上数、商品Bの売上数・・・※商品名ごとにレコードを持っています。)の2つのテーブルを使っています。 これをクエリで抽出しているのですが、社員一人につきひとつのレコードしか抽出されません。 売上のない支店も全て抽出し、実績報告書として印刷するため、テーブルAとBに結合のプロパティでテーブルAの全てを選んでいるため、これ以外の方法でテーブルBのデータ全てを抽出したいのですが、何か方法はありますか?

  • アクセスのフィールドデータ更新について

    アクセス初心者です。 商品売上TB(レコード数10万件)に [出荷日][出荷先][商品名A][個数]の4つのフィールドがあります。 商品名TBのフィールド(レコード数500件)に [商品名B][金額A]2つのフィールドがあります。 商品名Aと商品名Bはリレーションでつながっています。 フォームで月別、商品別、出荷先別に個数、金額が見られるようにしています。 年に1度商品の単価見直しがあり、毎年10/1に行われます。 見直し前のデータも取っておきたいのですが、そのような場合 新たなテーブルを作り追加クエリで[出荷日][出荷先][商品名A][個数][金額A] を毎年追加していくのか? ファイルサイズがかなり大きくなってしまうと思います。 商品名TBに[金額B][金額C]のようにフィールドを増やしていくのか? 毎年クエリで条件式が増えるとあまりスマートでないと思います。 使い勝手も悪そうです。 通常皆さんはどのようにされているのでしょう?

  • ACCESSのクエリ機能で重複したデータを除く方法

    accessの初心者です。 どなたかお詳しい方是非よろしくお願い致します。 accessのクエリ機能をつかい、レコードを結合したいのですが、重複したレコードを省く方法を教えてください m(_ _)m 例えば、下記のようなAとBというテーブルがあり、Aには商品番号と商品名、Bには商品番号と倉庫名が入っているとします。 テーブルA(※商品番号の重複なし) 商品番号 商品名 001    商品A 002    商品B 003    商品C テーブルB(※商品番号の重複あり) 商品番号 倉庫名 001    倉庫A 001    倉庫B 001    倉庫C 002    倉庫B 002    倉庫C 003    倉庫A 003    倉庫B 商品番号でクエリをかけて、テーブルAのレコード数と同じレコードの商品番号、商品名、倉庫名と表示させたいのです。 (倉庫名はテーブルBのレコードの中のいずれかだけでOKです。) 例えば、下記のようなクエリ結果を表示させたいです。 商品番号 商品名 倉庫名 001   商品A  倉庫A 002   商品B  倉庫B 003   商品C  倉庫A 説明がうまくできず申し訳ありませんが、どなたかお詳しい方よろしくお願い致します。

  • Access2007 クエリの作成 フィールド選択

    Access2007を独学で勉強中です。とっても基本的なことだと思いますが教えてください。 テーブル「売上台帳」には「売上No.」「売上日」「商品CD」「数量」があります。 テーブル「商品台帳」には「商品CD」「商品名」「単価」があります。 この二つをクエリを使って1つの表として扱えるようにしたいのですが、テキストをみると「商品CD」はテーブル「売上台帳」から取るようになっています。なぜテーブル「商品台帳」の「商品CD」を使わないのでしょうか??? 因みに、どちらから「商品CD」をとっても、クエリのデータシートビューで確認すると同じ結果になりました。 なお、リレーションシップと参照整合性の設定は行っています。 クエリを作成する上で重要なことのように思えましたので、質問させていただきました。 よろしくお願いいたします。

  • SQLServerの仕様?バグ?

    以下のデータ、条件でクエリを発行しました。 ■環境 SQLServer2005(データベースはSQLServer2000) ■テーブルA 社員番号 社員名 商品 金額 ---------------------------- 00001 社員A 商品A 100 00002 社員B 商品A 100 00002 社員B 商品B 100 00003 社員C 商品B 100 ■クエリ SELECT COUNT(*) FROM テーブルA WHERE 社員番号 = (1) GROUP BY 社員番号 ここで質問です。 (1)に'0002'と入れたときは「2」と返ってきますが、 (1)に'0004'と入れた場合、結果何も返ってこない(ゼロすら返ってこない)のですが これは仕様なのでしょうか?バグなのでしょうか? そもそもGROUP BYが必要ないということは承知しております。 どなたかお分かりになる方、いらっしゃいますでしょうか。 よろしくお願い致します。

  • アクセスについて

    アクセス初心者です。 アクセスで毎月入ってくる商品に商品番号を付与しようと思っています。 商品リストテーブルには   フィールド1→商品名   フィールド2→商品番号 商品一覧テーブル    フィールド1→商品名(毎月100件程入る) この2つのテーブルから 商品番号付与クエリーを作成しました。 (フィールド1同士を繋ぎ、フィールド2の商品番号を引っ張ってくる) 但し、商品一覧テーブルに入ってくる商品の中で、まだ商品リストテーブルに登録されていない商品があります。その時、クエリーでは、その商品は表示されません。 どうにか登録されていない商品があった場合に、エラーと表示できるか、又は登録されていない商品を抽出するようなクエリーの作り方を教えて下さい。 よろしくお願いします。 分かりづらくてスミマセン・・・

  • アクセスSQL

    アクセス初心者です。 テーブルAに(売上日、商品A売上金額、商品B売上金額、支店)フィールドがあります。 売上日フィールドは重複あります。 次のクエリを定義するSQLはどのように記載すればいいでしょうか? 第一フィールド フィールド名:売上日リスト 内容:テーブルAの売上日を重複無しで全種類抜き出し日付順ソート。 第二フィールド フィールド名:商品Aラスト売上金額 内容:第一フィールドの売上日グループで、最後の商品A売上金額 第三フィールド フィールド名:商品Bラスト売上金額 内容:第一フィールドの売上日グループで、最後の商品B売上金額 以上よろしくお願い致します。

  • グループ集計のカウントについて 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と回答した人の数 総数は商品に対するレコード数

  • ACCESSのクエリに行番号をつける

    Microsoft ACCESS 2003で、簡単な以下の様なクエリを作っています。 (1) 元のテーブル  売上年月日/販売先顧客名/商品名/数量/価格 (2) 売上年月毎価格集計クエリ  売上年月(グルーピング)/商品名(グルーピング)/数量(集計)/価格(集計)  このクエリが、以下の様に出るとします。  例1)  2009/09 商品A 50 25,000  2009/09 商品B 20 12,000  2009/09 商品C 33 45,000  ・  ・  2009/10 商品A 50 25,000  2009/10 商品B 20 12,000  ・  ・  このクエリの先頭に、以下例2の様に、年月毎にブレークする「行番号」をつけたいのですが、どの様にすればいいか見当がつきません。  行番号をつけられる(かつ、特定の条件でブレークして、行番号を"1"から振り直す)様な関数、関数が無ければやり方等、わかる人がおられたらお助け下さい。  よろしくお願いします。  例2)  1,2009/09 商品A 50 25,000  2,2009/09 商品B 20 12,000  3,2009/09 商品C 33 45,000  ・  ・  1,2009/10 商品A 50 25,000  2,2009/10 商品B 20 12,000  ・  ・

専門家に質問してみよう