過去の桐井戸端BBS (桐ver.9)
27341 入金表と支出表、同じような支出の表の計3つの表を日々で結合表示させたい masa 2004/08/11-19:09
久々の投稿ですがよろしくお願いします。
結合表ってなんとなく理解していたつもりだったのですが、久々にトライしてみると出来ませんでした。
結局は入金表と支出表・同じような支出の表の計3つの表を日々で結合表示させたかったのですが、
サンプル表を見てもムムッという感じでした。

すみません。「補完するために」にアップしました。
こちらこちら
イメージもエクセルでですが作成しました。
ちょちょっと教えて下さい。よろしくお願いします。

27359 Re:結合表の詳しい方お願いします masa 2004/08/12-20:44
記事番号27341へのコメント
桐v8sp6ですが、似たような例題がインストール時に出来るサンプルデータ
¥k3¥KIRIV8¥Sample¥例題¥結合表¥のGroup-2a.viwにあるのですが
条件で外しているわけでもないのに、何故か一つの得意先だけが集計されていません。
どういう事が考えられるでしょうか?

表は
得意先.tblと入金.tblがあります。

結合表は
入金.viwで

@表示項目名  A所属対照表  B項目計算式

@入金予定日 A入金.tbl   B入金予定日
@E     A入金.tbl   BE
@得意先名  A得意先.tbl  B得意先名
@税込金額  A(計算項目) B#合計(["入金.tbl".税込金額])

よろしくお願いします。

27362 基本的なところに誤りがありそうですが 佐田 守弘 2004/08/12-22:42
記事番号27359へのコメント
masaさん
2つのファイルを一通り拝見しました。
実の所、質問文には何がしたいのかが書いてありませんし、またサンプルデータも
何をしようとしているのかが分からない所があります。
特にそれぞれの表はどういう意味のデータなのかが良く分らないので、質問の意味を理解できてはおりませんが、
気がついた所でのコメントをします。

●目的は何なのか
Excelファイルを見ると、同じ支払日の関連あるデータを集めて、入出金の差引残高を
逐次計算しようとしている様に見えます。
しかし結合表とその結合元の表の作りが、その様になっていません。

●中心となる表はどれですか
結合を平たく言えば、1つの表を中心として、関連づけられたレコードの項目値を
他の表から持って来てつなぎ合わせる。そんな操作です。

さて、この結合で中心となる表はどれなのでしょうか。毎月.tblがその表の様に思えたのですが、
そうでもない様ですね。

●結合の設定
結合表を見ると、入金.tblと支出.tbl、入金.tblと毎月.tblがそれぞれ支払日を結合項目として設定されていますね。
毎月.tblには、入金と出金のデータがあってい、ここに入金と出金をそれぞれ組み合わせたいというのなら
分らないでもないのですが、入金と支出を結合させると言う事の意味が良く分りません。

●支払日での結合
一番の問題は、支払日を結合項目としている点です。
3つの表のそれぞれに同じ日付があります。これで結合を行えば、掛け合わせた組合わせの数だけの
レコードが抽出してしまいます。
本当は日付だけの組合わせではなくて、何か別の項目が一致するものを組合わせようと
しているのではないでしょうか。しかし結合表はそうなっていません。

佐田守弘(KS-00119)
27365 Re:基本的なところに誤りがありそうですが masa 2004/08/12-23:39
記事番号27362へのコメント
佐田 守弘さん どうもありがとう御座います。
説明が足りなくてすみません。

使っている表の意味的には
支出.tbl=仕入先を中心とした支払いの表です。
毎月.tbl=自動引落等のずっと先まで固定的に支払金額のわかっているデータ表です。
入金.tbl=得意先へ売上た品毎の入金日のわかるデータ表です。

>●目的は何なのか
>Excelファイルを見ると、同じ支払日の関連あるデータを集めて、入出金の差引残高
>を逐次計算しようとしている様に見えます。
最終的にはそれを目指しています。
一つ一つ解決しようと思い、結合表を結合できるという事で、入金.tblを
日にち かつ 相手先毎に集計した結合表を作ろうとしたのが
投函したものです。

同様に支出.tblにも 同じ日にち 相手先で数行データがあるので集計した形で
表示させようと考えてます。

>しかし結合表とその結合元の表の作りが、その様になっていません。
不明のまま現状が変になってしまいました。

>●中心となる表はどれですか
支出.tblです。

>●結合の設定
>結合表を見ると、入金.tblと支出.tbl、入金.tblと毎月.tblがそれぞれ支払日を結合
>項目として設定されていますね。
結局の所、日にちと相手先毎で集計させた表を作りたいです。

>毎月.tblには、入金と出金のデータがあってい、ここに入金と出金をそれぞれ組み合
>わせたいというのなら分らないでもないのですが、入金と支出を結合させると言う事
>の意味が良く分りません。
結合表が1つの表を中心に作られるようなので、支出.tblを元にしました。


>●支払日での結合
>一番の問題は、支払日を結合項目としている点です。
>3つの表のそれぞれに同じ日付があります。これで結合を行えば、掛け合わせた組合
>わせの数だけのレコードが抽出してしまいます。
>本当は日付だけの組合わせではなくて、何か別の項目が一致するものを組合わせよう
>としているのではないでしょうか。しかし結合表はそうなっていません。

支払日=日にち かつ 相手先で 集計した結果を表示させたかったのです。
(実表?支出.tblや入金.tblが変更や更新されると結合表も反映してほしい形です。)
よろしくお願いします。


27375 Re:基本的なところに誤りがありそうですが 佐田 守弘 2004/08/13-13:05
記事番号27365へのコメント
masaさん
●実表更新できる結合表を作るには
 >支払日=日にち かつ 相手先で 集計した結果を表示させたかったのです。
 >(実表?支出.tblや入金.tblが変更や更新されると結合表も反映してほしい形です。)
まずこの点についてコメントしますと、提示されているサンプルデータの表の形では
実表更新できる結合を行う事は不可能です。
これが、タイトルに書いた「基本的なところに誤りがありそうですが」の意味です。

実表更新を行うには、毎月.tblと入金.tblに主キーを設定し、支出.tblの対応する
項目に外部キーを設定し、1対n型の結合関係を設定しなければなりません。
通常はその様な形に表を設計するものです。

しかしながら、提示されているサンプル例では日付(支払日)がキー項目になっているのですが、
毎月.tblと入金.tblでは同じ日付が重複して存在しています。
ですからこれらの表に主キー設定を行う事は不可能です。

つまり今回の質問であるどの様に結合表を作るか、は、結合表の定義の問題ではなく
元になる表の設計から考え直さないと解決にはなりません。
(サンプルデータだけでは、何ともアドバイスのしようがありません)

●実表更新しなくてよいならば
いくつか方法はあると思います。
1)日付と相手先を組み合わせた項目を作り、この項目をキーにして結合を行う
2)結合定義の条件に、相手先が同じ値であると言う条件式を記述する
などです。
但しこの様な結合は、私も行ったことがないので、どの様な結果になるかは解りません。

佐田守弘(KS-00119)
27379 Re:基本的なところに誤りがありそうですが masa 2004/08/13-21:19
記事番号27375へのコメント
佐田 守弘さん どうもありがとう御座います。

>●実表更新しなくてよいならば
>いくつか方法はあると思います。
>1)日付と相手先を組み合わせた項目を作り、この項目をキーにして結合を行う
>2)結合定義の条件に、相手先が同じ値であると言う条件式を記述する
この線で色々試してみたいと思います。

別件ですが「桐井戸端BBSを補完するために」NO.133で何故か
[E]項目の”1281-00”だけ集計から外れてしまうのですが
これはどうしてでしょうか?教えて下さい。
よろしくお願いします。

27380 抽出されないのはデータがないからです 佐田 守弘 2004/08/13-22:40
記事番号27379へのコメント
masaさん

 >別件ですが「桐井戸端BBSを補完するために」NO.133で何故か
 >[E]項目の”1281-00”だけ集計から外れてしまうのですが
一見別件の質問の様に見えますが、結合表の考え方の基本的な部分では同じ内容なので、このツリーに続けてコメントします。

理由はとても単純で、結合する相手方のデータがなから抽出されないだけの話です。

この結合は、入金.tblに得意先.tblを結合している形になっています。
(多分その様に結合関係を設定したのだと思います)
ここで結合する際にデータを持って来る側の表とでも言いましょうか、
主キーを設定しているとすれば、主キー側の表の方が得意先.tblになっていますね。

で、得意先.tblを見ると、1281-00に相当するデータが存在しません。
相手方のデータが存在しないから、結合で抽出されないのです。

●無理やり抽出するなら
結合関係の属性で、入金.tblの側に「全レコードを抽出する」にチェックマークを入れて下さい。
そうすれば結合相手のデータがなくても、強制的に抽出されます。
しかし、その結合結果を見れば分りますが、[得意先名]が空白になります。

これは実務で例えれば、「存在しない相手先に売却した架空の売上データ」
の様なものです。通常は意味のない、あるいは誤ったデータの扱いになるのではないでしょうか。

●本論に立ち戻ると
さて、最初の質問での課題に立ち戻ります。

この例題の様なデータであれば、実表更新ができる結合、つまり主キーと外部キー
そして参照整合性をきちんと設定した結合表の定義ができます。
なぜなら得意先.tblの[E]はユニークな値になっているためです。

練習と思ってこの設定を行ってみて下さい。

但し、実際に行うと分りますが、得意先.tblへの主キー設定はうまく行きますが、
入金.tblの再定義画面で外部キーを設定し、編集画面に戻る段階でエラーが発生するはずです。
(参照整合性で「主キーを削除する時」に「参照項目も削除する」を選んである前提)
そしてエラーを確認して進め、表編集画面に戻ると、1281-00 のデータが削除されて要ることに気がつくはずです。

そしてそれを体感した時に初めて、この質問の原因が何であったのかと、
私が上記に書いた説明の意味が、しっかりと腹に落ちるはずだと思います。

そしてこれを体感した時に、masaさんは結合表の本質が何であるかが分り、
そして最初の質問はどの様に解決すべきかの糸口が見えて来るであろうかと思います。

佐田守弘(KS-00119)

戻る