- ベストアンサー
Accessでのリレーションシップなど
こんばんわ。過去ログを調べてみたのですが、ちょっと今ひとつ不明な点がありましたのでお伺いさせて 頂きたく記載致しました。現在、下のようなテーブルを作っております。 1)費目DB(合計60件ほど) ・科目番号←主キー設定済み ・大科目 ・中科目 ・小科目 ・予算金額 2)入力DB(約200件ほど入力/月) ・科目番号 ・金額 ← データ型:数値型/フィールドサイズ:長整数型/書式=通貨 ・調達伝票起票日 ・契約伝票起票日 リレーションシップで、1)費目DBの科目番号を「1」とし、2)入力DBの科目番号を「∞」として 組んでおります。 やりたい事は、2)入力DBに複数存在する同じ科目番号同士の金額を合計したものを出したい、という 事です。吐き出されるファイルのレコードのイメージは ・科目番号 ・大科目 ・中科目 ・小科目 ・金額の合計 です。 又、上記プラス2)入力DBにある「調達伝票起票日」毎(例:5/1~5/30分)の合計金額、という形でも 出したいのですが…。 尚、科目番号(8桁)には意味がありまして、左2桁=大科目の番号 次の3桁=中科目の番号 最後の 3桁=小科目 の番号を8桁の連番として科目番号をしております。 例えばこのような状態で科目番号11310XXX~11320XXXのみを抽出したい場合、どのようにすれば 宜しいでしょうか。 とりあえず苦労しているのが何故か金額が計算されない、という事です。データ型などの設定が誤っている 所為でしょうか。 それから、クエリーとリレーションシップとの大きな違いは、どういう所なのでしょう。 お手数ですが、どなたかご教授頂けますと大変助かります。何卒宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 まずは、質問1から。 >2)入力DBに複数存在する同じ科目番号同士の金額を合計したものを出したい 作成するファイル(?テーブルですよね?)を「科目集計DB」として、 クエリーのSQLビューで以下の通りに記述してください。 ------------------------------------------------------------------------- SELECT A.科目番号, A.大科目, A.中科目, A.小科目, Sum(B.金額) AS 金額の合計 INTO 科目集計DB FROM 費目DB AS A, 入力DB AS B WHERE (((A.科目番号)=[B].[科目番号])) GROUP BY A.科目番号, A.大科目, A.中科目, A.小科目; ------------------------------------------------------------------------- 普通の集計クエリーにすると「入力DB」に科目番号のないものも集計されてしまい ます(多分、リレーションショップの関係で)。 質問2。 >上記プラス2)入力DBにある「調達伝票起票日」毎・・・ 上記のクエリーをちょっと変更して ------------------------------------------------------------------------- SELECT B.調達伝票起票日, A.科目番号, A.大科目, A.中科目, A.小科目, Sum(B.金額) AS 金額の合計 INTO 科目集計日付DB FROM 費目DB AS A, 入力DB AS B WHERE (((A.科目番号)=B.科目番号)) GROUP BY B.調達伝票起票日, A.科目番号, A.大科目, A.中科目, A.小科目; ------------------------------------------------------------------------- なお、日付の範囲指定をしたい時はWHERE句に日付抽出条件を追加してください。 質問3. >例えばこのような状態で科目番号11310XXX~11320XXXのみを抽出したい場合・・・ BETWEEN関数を使えば出来ると思います。 この例では 「A.科目番号 BETWEEN '11310000' AND '11320ZZZ'」 小科目が数字のみであるなら 「A.科目番号 BETWEEN '11310000' AND '11320999'」 で良いと思います。 質問4. >クエリーとリレーションシップの違い・・・ クエリーはテーブル毎のデータ連携をするだけで、リレーションショップはデータ連携をすると共に、データの整合性まで行うところかなぁ。ちょっと自信ないです。 (オプションで「参照整合性」にチェックを入れた場合のみ) こんなので良いでしょうか? ではでは・・・
その他の回答 (1)
- O_cyan
- ベストアンサー率59% (745/1260)
クエリを使えば簡単に出来ます。 ・科目番号・大科目・中科目・小科目・金額が入ったクエリを作り(Σ)集計で グループ化して金額のフィールドをグループ化ではなく合計に変更すれば 科目番号内の小科目ごとの集計ができます。並び替えは科目番号から全て 昇順にすれば間違えはないでしょう。 ・大科目の集計が必要なら他の・科目番号・中科目・小科目をクエリから削除 すれば大科目のみの集計が出来ます。中科目ごとの集計をしたければ・大科目 ・中科目のフィールドを残せばOKです。 「調達伝票起票日」毎の集計をするならそのクエリに「調達伝票起票日」の フィールドを追加して抽出条件にBetween 5/1 And 5/30と指示すればその期間 の集計をします。 「調達伝票起票日」のフィールドはグループ化ではなく WHERE条件を選択すること。 同じ様に科目番号の範囲を指定したければ科目番号の抽出条件に Between 11310XXX And 11320XXX と指示すればOKです。 クエリとリレーションの違いは・・・。 クエリはデータ毎の連携でリレーションはテーブル毎の連携みたいな理解で良いのではないかと思います。
お礼
こんばんわ、と申しますか、おはようございます<(_ _)> この度は、ご丁寧にご教授頂きまして誠に有難うございました。おかげさまで無事、作業が完了しました。 又、クエリとリレーションの違いにつきましても簡潔に、かつ判り易くご説明頂きました事に感謝致します。 ホッとしたと同時に「Accessって本当に奥が深い」というか、勿論、素晴らしい!と感動したことも事実なの ですが、これらの機能をフル活用出来たらどんなに良いだろう…とも思いました。まだまだ勉強不足すぎ ですので、これを機に更に頑張りたいと思います。 本当に有難うございました。また、どこかでお会いするような事がありましたら、是非とも宜しくお願い 申し上げます。重ね重ね、誠に有難うございました。
お礼
こんばんわ、と申しますか、おはようございます<(_ _)> この度は、SQLの記述まで非常にご丁寧にご教授頂きまして誠に有難うございました。おかげさまで無事、作業 が完了しました。 ホッとしたと同時に「Accessって本当に奥が深い」というか、勿論、素晴らしい!と感動したことも事実なの ですが、これらの機能をフル活用出来たらどんなに良いだろう…とも思いました。まだまだ勉強不足すぎです ので、これを機に更に頑張りたいと思います。 本当に有難うございました。また、どこかでお会いするような事がありましたら、是非とも宜しくお願い 申し上げます。重ね重ね、誠に有難うございました。