MS Access Tips/Sample and VBA and Blog customize etc...

フィールド間(横方向)での集計関数

値1, 値2, 値3, ・・・というようにフィールドがあり、そのフィールドすべての合計、最大値、最小値、平均 を求める関数はないのでしょうか。

Sum関数, Max関数, Min関数, Avg関数 は、一つのフィールドに対して縦方向に集計は出来ますが、横方向に展開するフィールドには使えません。データベースは正規化されたテーブルを前提に設計されているからです。

上記の質問のように、同じ性質のフィールドが横に展開するようなテーブルは正規化されてないので、データベースで扱うのは、非効率的になります。ですので、「テーブルを正規化してください」というのが正しい回答になります。

しかし、外部データでこちらからは変更できないなどの事情で、正規化できない場合もあるかも知れません。そのような場合に使える関数を紹介します。(ただし、重いですよ。)

難易度:

標準モジュールに下記の関数を作成します。

使用例

テキストボックスのコントロールソース

=GetSum([値1],[値2],[値3],[値4],[値5])

クエリの演算フィールド

合計: GetSum([値1],[値2],[値3],[値4],[値5])

集計したい値の入ったフィールド名、コントロール名を引数として列挙します。

拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/182-a4730aee
該当の記事は見つかりませんでした。