クエリ 1レコードの複数項目を複数レコードに分ける [クエリ]
テーブルに同じような内容の項目が複数必要な場合、冗長性を排除する正規化の考え方では別レコードに分かれるように設計するのですが、そうすると処理や管理が煩雑になる場合もあります。
例えば、1日につき3つの金額を記録したい場合に、このようなテーブルを作ったとします。
データベースで処理を行う際、同じ項目を複数レコードに渡って処理するのは簡単な場合が多いです。
逆に、1レコード中の、別々の項目に、同じ処理を行う場合は、面倒になることが多いです。
その場合、クエリを使って、各項目が独立したレコードになるように加工してから処理を行った方が効率が良い場合もあります。
今回はその方法を説明します。
クエリ 日別(年月日)のデータを曜日別に項目を分け週別で集計する [クエリ]
言葉での説明だとわかりにくいように思いますので、図を先に載せます。
日付と金額の項目を持ったデータテーブルをクエリで以下のような結果に加工します。
月曜日から土曜日の項目で金額を表示し、1レコードはその1週間の集計にします。
クエリ 日別(年月日)のデータを週ごとに集計する [クエリ]
日別のデータを、日曜日から土曜日の1週間ごとに集計する方法です。
データは以下の通り。
日付と金額項目のみのデータテーブルです。
テーブルには日付項目しかないので、日付から週を判断し、同じ週のレコードが集計される方法を考えます。
いきなり回答を思いつくのは難しいので、ひとつ日付をあげて考えてみます。
2013/1/24は木曜日です。その週の日曜日は2013/1/20です。
各レコードの日付を日曜日の日付に変換することができれば、それを基準にグループ化して、集計できそうです。
クエリ 日別(年月日)のデータを曜日で集計する [クエリ]
日付項目しか持たないデータテーブルの内容を、曜日で集計する方法です。
下図のサンプルで考えます。
日付項目と、金額項目があるデーブルです。これを、曜日で集計します。
日付から曜日を得るのは、Weekday関数を使用します。
日付をパラメタに指定すると、曜日に対応する値が帰ってきます。
デフォルトでは日曜日=1から土曜日=7が返されます。
クエリ WHEREとHAVING [クエリ]
WHEREは抽出条件を設定する構文ですが、同じような構文にHAVINGというのがあります。
ACCESSのクエリ作成のGUIは非常に良くできていて、SQLに詳しくなくても、直感的に様々なクエリを作成することができます。
その便利さゆえ、初心者がやってしまいがちな間違いがHAVINGの使い方です。
例えば、下図のようなテーブルのデータから、2012/1/3のデータから、金額の合計集計を得たいとします。
データは日別・担当者別となっていますので、単なる条件抽出だけではなく、集計が必要になります。