質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

2746閲覧

Accessのデータグループ化について。

Ena3850

総合スコア8

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2016/08/07 07:31

編集2016/08/07 09:30

###前提・実現したいこと
はじめまして。Ena3850と申します。Accessにて悩んでいるので助けていただけると幸いです。

早速ですが、
どちらも同じようなデータが入っているAデータとBデータがございます。
Aが古いデータ、Bが新しいデータという形になります。
AとBが同じ商品のものだけを抽出して、Bの一部のデータ(仮に在庫情報とさせて下さい。)データをAに置き換えたいと思っております。
ここでいつもどおりにクエリで、AとBを両方のテーブルの結合フィールドが同じ行だけを含めるでつなぎ、在庫情報以外をAのデータを引っ張ってきて、在庫情報だけをBのデータで吐き出すように設定。

これだけでは、ダメなのでしょうか…? 同じデータが複数吐き出されてしまい、グループ化を試してみても上手く行かず行き詰まってしまいました。初心者過ぎて申し訳ないのですが、ご教授いただけるとありがたいです。

よろしくお願いいたします。

###データの内容
商品コードが1つに対して、属性1コード・属性2コードは複数になります。1つの商品コードに対して、各属性コードが複数ぶら下がっている形になります。ですが、各属性コードそれぞれに商品コードが入っているのでAデータとBデータの多重度は1:1だと思います。

###現状のSQLビュー(当方、SQLは無知でございます。ビューの原文コピーです)
SELECT A.商品コード, A.属性1コード, A.属性2コード, B.在庫数量
FROM A INNER JOIN B ON A.商品コード = B.商品コード
GROUP BY A.商品コード, A.属性1コード, A.属性2コード, B.在庫数量;

これを実行すると
商品コード 属性1コード 属性1名 属性2コード 属性2名 在庫数量
m-145872 01 one 01 【☆】black<br>(col.99) 0
m-145872 01 one 01 【☆】black<br>(col.99) 6
m-145872 01 one 01 【☆】black<br>(col.99) 8
m-145872 01 one 01 【☆】black<br>(col.99) 49
m-145872 01 one 01 【☆】black<br>(col.99) 187
m-145872 01 one 02 red<br>(col.75) 0
m-145872 01 one 02 red<br>(col.75) 6
m-145872 01 one 02 red<br>(col.75) 8
m-145872 01 one 02 red<br>(col.75) 49
m-145872 01 one 02 red<br>(col.75) 187
・・・以下他の色で同じことが繰り返されています。これを

###本当は下記データを作りたいです。
商品コード 属性1名 属性コード 属性2コード 属性2名 在庫数量
m-44135 01 one 01 black<br>(col.99) 18
m-44135 01 one 02 red<br>(col.75) 6
m-44135 01 one 03 navy<br>(col.39) 8
m-44135 01 one 04 green<br>(col.49) 49
m-44135 01 one 05 black<br>(col.99) 187
m-44135 01 one 06 beige<br>(col.81) 0
1つのコードに対して1つのサイズ・1つのカラー・在庫数のような形にしたいと思っています。

###発生している問題・エラーメッセージ
同じデータが抽出され、グループ化も出来ず、在庫情報が繰り返し入力されてしまう。

###試したこと
グールプ化や1つ1つやりたいことを個別にクエリを組んで試してみたが、最終結果は同じでした。

お手数ですが、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Panzer_vor

2016/08/07 08:41 編集

例示されているAデータとBデータの多重度(1:1、1:n、n:nなど)はお分かりになりますか? 具体的に言うとAの1つの商品に対してBの同一商品データは1つですか(1:1)、または複数になりますか(1:n)。簡単にでにもいいので、 ①どういったデータの入り方をしているのかのサンプル ②更新結果がどうなって欲しいのか 上記を示していただけたら解答が付きやすくなります。
Ena3850

2016/08/07 08:47

情報の追加など教えていただきありがとうございます。 教えていただいた情報を元に編集させていただきます。
Panzer_vor

2016/08/07 14:26

遅くなりましたが追記確認しました、ありがとうございます。
Panzer_vor

2016/08/07 14:29

後1点だけ確認したいのですが、 Aデータの定義、Bデータの定義情報ですが、 どちらも商品コード、属性1コード・属性2コードの列を保持しておられますか?
Ena3850

2016/08/07 15:47

こちらこそ、遅い時間にお返事いただいてありがとうございます。 どちらも商品コード・属性1コード・属性2コードの列を保持しております。現段階では商品コードで結び付けている状態になります。 お手数ですが、ご教授よろしくお願いいたします。
guest

回答1

0

ベストアンサー

修正依頼でのコメントを受けまして。

  1. 商品コード、属性1コード、属性2コードでデータを一意に識別できる
  2. Aデータ、Bデータ共に上記の3項目を保持している
  3. 多重度は1:1である

上記3条件が成り立っている場合でしたら、
恐らく結合キーを増やすことでレコード増殖を防げます。

SQLで表すと下記のイメージです。

SQL

1SELECT 2 A.商品コード 3 , A.属性1コード 4 , A.属性2コード 5 , B.在庫数量 6FROM A 7 INNER JOIN B 8 ON A.商品コード = B.商品コード 9 AND A.属性1コード = B.属性1コード 10 AND A.属性2コード = B.属性2コード

AデータとBデータの多重度が1:1であれば、1行のデータに対して1行が対応するので、GROUP BYも不要となります。

当方Accessはあまり触る機会がないため、選択クエリ、更新クエリでどのようにテーブル同士を関連させるか具体的なやり方は忘れましたが、
恐らく質問者さんが商品コード同士で紐付けた所を、
商品コード、属性1コード、属性2コード3つで関連づけるように変更し、
各列に条件とか指定する箇所で「集約する」みたいな所をチェックしているようでしたら、
そちらを全て外していただくと上記のようなクエリがAccess側で自動作成されると思われます。

注意点として、
仮にどちらかのデータが商品コード、属性1コード、属性2コードが同一のデータを複数持つ場合は多重度が1:nになってしまい、上記で掲示したクエリでは想定した結果を返さない恐れが高いです。

その場合はまた詳しい状況を教えて頂ければ再考してみます。

投稿2016/08/07 17:07

編集2016/08/07 17:09
Panzer_vor

総合スコア1636

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ena3850

2016/08/08 06:50

遅くなりました! KotoriMaturiさん、ありがとうございました!無事、行けました!! 本当に助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問