AテーブルのレコードとBテーブルのフィールドをリレーションさせる方法はあるのでしょうか
やろうとしている事は、Bテーブルの各フィールドにはそれぞれの商品数量があって、そのフィールド(商品名)の単価をAテーブルから参照させたいのですが
主キーがAテーブルでは、商品名に出来そうですが、Bテーブルは、商品名が
フィールドとなっているので
配列のような概念が利用できないかとも思ってマニュアル探してみましたが判りませんでした。それともデータベースの考え方が間違っているのでしょうか?
ご存知の方いらっしゃいましたら宜しくお願いします。

A 回答 (1件)

レコードとフィールドのリレーション処理は、できないです。



えーと、も少しテーブルの構造やなさりたいことを、具体例をあげて書いていただくと、解決策が書きやすいんですが、
Aテーブル
 商品ID
 商品名
 単価
Bテーブル
 商品ID1
 商品数量1
 商品ID2
 商品数量2
   :
のようになっていて、単価×数量で、商品1,商品2…の売上金額を求めたい。ってことなんでしょうか?

もしそうであれば、根っこの部分の問題として、テーブルの構造に難があるとことになります。

Bテーブルを
 伝票ID
 商品ID
 数量
ってな構成にして、伝票一つに付き複数レコード生成するようにする、ってのが根本的な解決になると思います。

データベースの大規模な改造を伴わずに解決するとすれば、DLookup()関数を使えば良いでしょうね。
クエリ中に、
DLookup("単価","Aテーブル","[商品ID]=" & [商品ID1])
と書けば、[商品ID1]フィールドの商品の単価を取得することが出来ます。
DLookup("単価","Aテーブル","[商品ID]=" & [商品ID1]) * [商品数量1]
で、売上金額が計算できます。

テーブル構造を修正する方式に比して、DLookup()の方は速度的には大幅に劣ります。が、修正の手間はこっちの方が遥かに簡単です。取り扱うデータ量が少ない(せいぜい数万件程度)んであれば、後者の方法で十分だと思います。

なんかあったら、補足をお願いします。
    • good
    • 0
この回答へのお礼

ありがとうございました。accessは初心者なので大変勉強になりました。
ご理解頂いている通りの内容です。質問内容が具体的でなくて申し訳ございませんでした。ホームページからcgiでサーバーに蓄積されたcsv形式データをダウンロードしてaccessで整理しようと考えていました。

お礼日時:2001/06/15 05:57

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

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

Q2つのテーブルAとBをマージして新しいテーブルCを作成したいのです。

2つのテーブルAとBをマージして新しいテーブルCを作成したいのです。マージするときは、最新の売上日フィールドをもつレコードを取得します。環境はAccess2000です。どんなSQL文を作成すればいいのでしょうか? 
また、テーブルAにしかないレコード、又はテーブルBにしかないレコードは、そのままテーブルCに追加したいです。
※下記テーブルAとBは、Access内に存在します。テーブルCはAとBのマージ後の結果作成されるテーブルです。

テーブルA
顧客番号   売上日   商品名   備考
   1  2000-01-01  ふでばこ   A
   2  2000-02-02  鉛筆     A
   3  2000-03-03  定規     A
   4  2000-04-04  シャーペン  A
  99  2000-09-09  パソコン   A

テーブルB
顧客番号   売上日   商品名   備考
   4  2001-04-04  シャーペン  B
   2  2000-02-02  鉛筆     B
   3  2001-03-03  定規     B
   1  1999-01-01  ふでばこ   B
 100  2005-11-11  ワープロ   B


テーブルAとBを、最新の売上日の条件でレコードを取得し新しいテーブルCを作成する。

テーブルC
顧客番号   売上日   商品名   備考
   1  2000-01-01  ふでばこ   A
   2  2000-02-02  鉛筆     A
   3  2001-03-03  定規     B
   4  2000-04-04  シャーペン  A
  99  2000-09-09  パソコン   A
 100  2005-11-11  ワープロ   B

SQL文で処理可能なのでしょうか?

2つのテーブルAとBをマージして新しいテーブルCを作成したいのです。マージするときは、最新の売上日フィールドをもつレコードを取得します。環境はAccess2000です。どんなSQL文を作成すればいいのでしょうか? 
また、テーブルAにしかないレコード、又はテーブルBにしかないレコードは、そのままテーブルCに追加したいです。
※下記テーブルAとBは、Access内に存在します。テーブルCはAとBのマージ後の結果作成されるテーブルです。

テーブルA
顧客番号   売上日   ...続きを読む

Aベストアンサー

サブクエリでネストしても出来ない処理があるのでクエリを分けた方が簡単ですよ。
単純にするなら3つ

'qry1として
SELECT テーブルA.顧客番号, テーブルA.売上日, テーブルA.商品名, テーブルA.備考
FROM テーブルA
UNION SELECT テーブルB.顧客番号, テーブルB.売上日, テーブルB.商品名, テーブルB.備考
FROM テーブルB;

'qry2として
SELECT qry1.顧客番号, Max(qry1.売上日) AS 売上日の最大, qry1.商品名
FROM qry1
GROUP BY qry1.顧客番号, qry1.商品名;

'qry3として
'テーブルCを作成するなら
SELECT qry2.顧客番号, qry2.売上日の最大 AS 売上日, qry2.商品名, qry1.備考 INTO テーブルC
FROM qry2 INNER JOIN qry1 ON (qry2.売上日の最大 = qry1.売上日) AND (qry2.顧客番号 = qry1.顧客番号)
GROUP BY qry2.顧客番号, qry2.売上日の最大, qry2.商品名, qry1.備考;

'既存のテーブルCに追加するならこちらで
INSERT INTO テーブルC ( 顧客番号, 売上日, 商品名, 備考 )
SELECT qry2.顧客番号, qry2.売上日の最大, qry2.商品名, qry1.備考
FROM qry2 INNER JOIN qry1 ON (qry2.売上日の最大 = qry1.売上日) AND (qry2.顧客番号 = qry1.顧客番号)
GROUP BY qry2.顧客番号, qry2.売上日の最大, qry2.商品名, qry1.備考;

サブクエリで処理できるところもありますがその辺はご自分でネストしてみてください。

サブクエリでネストしても出来ない処理があるのでクエリを分けた方が簡単ですよ。
単純にするなら3つ

'qry1として
SELECT テーブルA.顧客番号, テーブルA.売上日, テーブルA.商品名, テーブルA.備考
FROM テーブルA
UNION SELECT テーブルB.顧客番号, テーブルB.売上日, テーブルB.商品名, テーブルB.備考
FROM テーブルB;

'qry2として
SELECT qry1.顧客番号, Max(qry1.売上日) AS 売上日の最大, qry1.商品名
FROM qry1
GROUP BY qry1.顧客番号, qry1.商品名;

'qry3として
'テーブルCを作成す...続きを読む

QMs Access テーブルBにテーブルAのCDを充てたい。(クエリ?紐づけ?リレーションシップ?)

初心者です。よろしくお願いします。
そもそも、できるのかどうか、できたとして、どうするのかがわからないです。

次の2つのテーブルがあります。
テーブルマスタA には、①市町村CD ②市町村名 ③住所(番地なし)
テーブル受付データB には、①NO ②住所(番地まであり)③受付日 ④⑤・・・

具体的には、以下のとおり。(サンプル)
テーブルマスタA
①    ②      ③
10000  松戸市    千葉県松戸市
20000  鎌ケ谷市本町 千葉県鎌ケ谷市本町
30000  横須賀市   神奈川県横須賀市
テーブル受付データB
①    ②
1    千葉県松戸市五香5-5-5    
2    千葉県鎌ケ谷市本町さくらがおか8-88-8 ひまわりアパート302
3    神奈川県横須賀市横須賀8-7-8   

テーブル受付データBにおいて、②の部分(市町名まで)と、
テーブルマスタAの③をなんとか紐づけて、

クエリで合体させたい。
=テーブル受付データBに、テーブルマスタAの市町村CDを充てたい。
A①市町村CD  A②市町村名 B② B③ B④ B⑤
とすることを切望しています。

***********
たとえば、2つのテーブルに同じフィールドがあって、
それをリレーションシップで紐づけるのは容易ですが、
今回のようなパターンは、
もしかして、私は、ナンセンスなことをしようと苦闘している?と思ってきました。
フィールド名が同じじゃないのに、それを紐づけることができるのでしょうか?

できるとして、どのようにすればよいのでしょうか?

どうぞ、教えていただきたく、お願いいたします!!!

初心者です。よろしくお願いします。
そもそも、できるのかどうか、できたとして、どうするのかがわからないです。

次の2つのテーブルがあります。
テーブルマスタA には、①市町村CD ②市町村名 ③住所(番地なし)
テーブル受付データB には、①NO ②住所(番地まであり)③受付日 ④⑤・・・

具体的には、以下のとおり。(サンプル)
テーブルマスタA
①    ②      ③
10000  松戸市    千葉県松戸市
20000  鎌ケ谷市本町 千葉県鎌ケ谷市本町
30000  横須賀市   神奈川県横...続きを読む

Aベストアンサー

パラメータが表示されたのは指定したフィールドがないからです。
テーブル名とフィールド名を使用している名前に変更してください。

InStr関数は
ある文字列 (string1) の中から指定された文字列 (string2) を検索し、最初に見つかった文字位置を返す文字列処理関数です。
InStr(string1, string2)

やっていることはテーブル受付データBの②(住所)の中からテーブルマスタAの③(住所)を検索し
文字列がある位置を出しています。
必要なのは文字列が含まれているデータのみなので条件を>0としています。

試しにInStrの部分をなくしてクエリを実行してみてください。
「テーブルマスタA」のレコード数*「テーブル受付データB」のレコード数のデータが表示されるはずです。

QACCESS 既存のテーブルのフィールド名をフォーム上のテキスト入力値に変更したい

いつもお世話になっております。

既存のテーブルのフィールド名を、単票フォーム上の入力値に変更
したいと思っています。
例)Aテーブル 月1 月2
  Bフォーム上のテキストA:200810 テキストB:200811
  (結果)Aテーブル 2008 200811

(テーブルデザインでの変更ではなく、コマンドボタン押下時等で行いたい)

どなたか、ご教示願います。

Aベストアンサー

フォームのボタンのイベントプロシージャの例
Private Sub コマンド_Click()
Dim TDS As DAO.Tabledefs
Dim TDF As DAO.Tabledef
Dim FLD As DAO.Field

Set TDS = CurrentDb.TableDefs
Set TDF = TDS("Aテーブル")
Set FLD = TDF.Fields("月1") '★1
FLD.Name = Me.テキストA.Value '★2
End Sub

★1定数にしておくと2回目からエラーになる。
 もし、「最初のフィールド」というなら(0)でも良い。
★2Null、空文字列、フィールド名として使えない文字のチェックを
 していないので、実際に作る時はチェックが必要

Qfilemakerでの繰り返しフィールドのリレーション

Filemakerの使い方で質問です。

WindowsでFilemaker8.0を使用しています。

部品マスタがあり、下記のようなものだとします。
部品番号 部品名
001   パーツA
002   パーツB
003   パーツC

管理マスタがべつにあり、部品マスタと部品番号でリレーションを
組んでいます。

これを1つのレコードに複数入力したいので繰り返しフィールドで
入力は部品番号で行い、その横に部品名が自動的に表示されるように
したいのですが、売上入力テーブルに新しいフィールドを定義して
ルックアップを利用する方法は判るのですが、それではマスタを
変更しても過去のレコードまでは変化しません。
部品マスタを変更した際に過去のレコードも自動的に変更して欲しいので
繰り返しフィールドをリレーションで部品名を表示させたいのですが可能なのでしょうか。

以上、よろしくお願いします。

Aベストアンサー

繰り返しはやめて、ポータルにして関連フィールドを配置します。

Qファイルメーカーで繰り返しフィールドからのリレーション!?

たとえばですが、従業員名簿のデータベースがあって
現場管理表のデータベースがあったとします。
現場に○○さんが出てきて、何時間働くといった表を
作るとき、繰り返しフィールドでやりたいと思います。
名前、勤務時間 時給 etc
それをルックアップで従業員名簿からは持ってこれるのですが、
そのデータを従業員名簿のほうでどの現場に何時間働
いたとかはわかるようにリレーションは組めますか?
現場管理表には繰り返しフィールドで何人か入力できる
ようになっています。エクセルで言うとsumifの関数みたいな感じにしたいです。
よろしく御願いします。

Aベストアンサー

そういう時は勤務実績表を別に作って、現場管理表からポータルで呼び出すのが楽ですよ。


このカテゴリの人気Q&Aランキング

おすすめ情報