• ベストアンサー

アクセスのクエリ

アクセスのクエリで、 ある会社に"課"という組織があり、1つの課に1係、2係、3係とあります。 1-1,1-2,1-3,2-1,2-2,2-3...とします。 アクセスのテーブルが2つあり、1つは、消費テーブル、もう1つは、注文テーブルです。 消費テーブルのフィールドは、"年月日"、"課と係(1-2など)"消費量" 注文テーブルのフィールドは、"年月日"、"課(1など係は考えず課だけで考える)"、"注文"となっています。 この消費テーブルと注文テーブルの"年月日"は同じ日ではありません。 これを月ごとに、例えば2009年10月分の1課の消費量の合計(1,2,3係合計)、注文数の合計、その差をクエリを使って表示させる様にするにはどうしたらいいですか? エクセルにてイメージを作ってみました。 誰か教えて下さい。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#245936
noname#245936
回答No.1

えー。 すいません、当方はSQL Server使いなのでSQLの方言があれば ごめんなさい。 まず、月次集計がほしい時、年月日、DateTime型フィールドは ちょっと使いにくいので、Accessで中間処理の「ビュー」を作る べきだと思います。 ビューのテーブル型としては、消費テーブルも、注文テーブルも 整形してこんな感じかな。  年(文字列) …2009  月(文字列) …10  部署(文字列)…1  課 (文字列)…1  量 (10進) …5000など 雰囲気では、 SELECT  文字変換(YEAR(年月日)) AS 年, 右2文字("00" & 文字変換(MONTH(年月日))) AS 月, 右2文字("00" & 文字変換(DAY(年月日))) AS 日,  左1文字(部署) AS 部署, 消費 AS 数量 FROM 消費テーブル 注文テーブルも同様にこさえます。 これを、それぞれ、消費中間ビュー、注文中間ビューとします。 ついで、これの集計を出すのは。 月次でよければ、 SELECT 年,月,部署,SUM(数量) FROM 消費中間ビュー (WHERE 年 = ほしい年 AND 月 = ほしい月 : なくてもよい) GROUP BY 年,月,部署 ORDER BY 年,月,部署 これで、グループ集計結果がだらだらーと表示されます。 注文も同様。 で、これを一撃で出したいのだから… 長いですよ… SELECT 年,月,部署,SUM(消費),SUM(注文) FROM ( (SELECT   年,月,部署,SUM(数量) AS 消費,0 AS 注文 FROM 消費中間ビュー   (WHERE 年 = ほしい年 AND 月 = ほしい月 : なくてもよい) GROUP BY 年,月,部署) AS A UNION ALL (SELECT 年,月,部署,0 AS 消費,SUM(数量)AS 注文 FROM 注文中間 ビュー (WHERE 年 = ほしい年 AND 月 = ほしい月 : なくてもよい) GROUP BY 年,月,部署) AS B ) AS X GROUP BY 年,月,部署 ORDER BY 年,月,部署 こんな雰囲気になるでしょう。

doradora64
質問者

お礼

丁寧にありがとうございます。 やってみます。

その他の回答 (3)

noname#245936
noname#245936
回答No.4

No.1の者です。 おおー、No.2様のSQLのほうがいいかも。 僕のやり方は、結合忘れちゃって、バグってますね。 すいませんでした。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

#2です ごめんなさい。 一応動くには動くのですが、中途半端なものを書いてしまいました。 指定した期間で出したいですよね。 文字通り参考ということで。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

一例となります。 SELECT Format(T1.年月,"@@@@年@@月") AS 年月 , T1.部 AS 部署 , T1.消費 , T2.注文 , T2.注文 - T1.消費 AS 差 FROM (SELECT Format(消費テーブル.年月日,"yyyymm") AS 年月 , Left(消費テーブル.部署,InStr(消費テーブル.部署,"-")-1) AS 部 , SUM(消費テーブル.消費) AS 消費 FROM 消費テーブル GROUP BY Format(消費テーブル.年月日,"yyyymm") , Left(消費テーブル.部署,InStr(消費テーブル.部署,"-")-1)) AS T1 LEFT JOIN (SELECT Format(注文テーブル.年月日,"yyyymm") AS 年月 , 注文テーブル.部署 AS 部 , SUM(注文テーブル.注文) AS 注文 FROM 注文テーブル GROUP BY Format(注文テーブル.年月日,"yyyymm") , 注文テーブル.部署) AS T2 ON (T1.年月 = T2.年月 AND T1.部 = T2.部); ※ 消費テーブルを主に考えているので、 例に於いて 注文テーブルに11月のデータがあっても表示されません。 逆に、消費テーブルに9月のデータがあると表示されますが、 注文、差 部分は NULL (カラ)で表示されます。

関連するQ&A

  • アクセスクエリ

    アクセスクエリのフィールド MS-accessのクエリで質問です クエリで、3つのテーブルがあります。 どのテーブルのフィールドにも[売上]があります。 この3つのテーブルの[売上] フィールド1列に表示させる方法はありませんか

  • アクセス(Access)で、3つのクエリ処理結果を1つのレポートに出力させたい

    こんにちは。QNo.348201 では大変お世話になり、有難うございました。とっても助かりました。 又、以前よりもほんのちょぴっとですが^^; 理解出来た部分が増えたので感謝しております<(_ _)> 皆様からご指導頂きました通りに作業をしまして無事、完成させたクエリですが、現在はそれを レポートに出力する所で行き詰まっております。やりたい作業は下記の通りです。 <クエリ> 1.“A 4月分” →フィールド名=合計金額/一般管理費 2.“B 4月分” →フィールド名=合計金額/消費税相当額 3.“C 4月分” →フィールド名=費目/種別/WBS番号・・・など合計16フィールド レポートに出力したいフィールドは “C 4月分”全部と、その行間に“A 4月分”の【一般管理費】、 “B 4月分”の【消費税相当額】を挟むような形で出力したいのですが、下記のようなエラーが出て しまいます。 『選択したフィールドのレコードソースにアクセスできません。テーブルと、そのテーブルを基にした クエリのフィールドを選択した可能性があります。もしそうであれば、テーブルかクエリのどちらかの フィールドだけを選択して下さい』 レポートの新規作成 から入り、「複数のテーブルまたはクエリからフィールドを選択出来ます」と 説明されていた レポートウィザード を選びました。 作業が滞っているのは、クエリで作成した、これら3つが起因しているのでしょうか。 このような複数クエリを1枚のレポートに出力する場合は、クエリでの作業は、一旦、テーブルとして 吐き出して、テーブルに入ったこれら3つを、レポートで処理する…という形になるのでしょうか。 前回同様、明日中に処理しなくてはならない背景があり、ご多忙中の所、誠に恐縮ではございますが 何卒、ご指導の程、宜しくお願い申し上げます。

  • Accessでの複数クエリ(テーブル)を用いたレポート出力

    こんにちは。QNo.348201とQNo.350892では大変お世話になりました。 1)クエリ処理した『プロジェクト別予算簿』のレポート↓ 費目   種別  月初残高 支出合計  100 … 200  月末残高 人件費  賞与  1,000,000 400,000 300,000 100,000 600,000 その他 外注費  400,000 100,000 100,000 300,000     会議費 600,000 200,000 200,000 400,000 2)下記表を作りたい。 費目   種別  月初残高 支出合計  100 … 200  月末残高 人件費  賞与  1,000,000 400,000 300,000 100,000 600,000 その他 外注費  400,000 100,000 100,000 300,000    ●管理費 800,000 200,000 600,000    ■相当額 700,000 400,000 300,000     会議費 600,000 200,000 200,000 400,000 -  - -  - -  - -  - -  - -  - -  - 合計金額 -  - -  - -  - -  - -  - -  - -  - ●=選択クエリ『管理費』の“一般管理費” フィールドをレポートの“支出合計”欄に転機したい ■=選択クエリ『相当額』の“消費税相当額”フィールドをレポートの“支出合計”欄に転機したい これら『管理費』『相当額』は共に「テーブル作成クエリ」としても作っているのでテーブルにもファイル として吐き出されています。 しかしどうしても 2)のレポートを作成出来ずに行き詰まっています。エラー内容は相変わらず 『選択したフィールドのレコードソースにアクセスできません。テーブルと、そのテーブルを基にしたクエリ のフィールドを選択した可能性があります。もしそうであれば、テーブルかクエリのどちらかのフィールド だけを選択して下さい』 です。

  • アクセスのクエリで

    アクセスのクエリで、テーブルAのフィールド1が"a"又は、"b"の場合は、"ABC"と表示し、それ以外の場合は、テーブルAのフィールド2に対応している、テーブルBのフィールド1の値を表示させる事はできますか? 誰か教えて下さい。よろしくお願いします。

  • アクセスのクエリーについて

     アクセスのテーブルでオートナンバー型の設定がありますが、クエリーでそれに変わるような機能はあるでしょうか。クエリーである事柄を抽出した場合でも、フィールドに連番を付したいのです。  アクセス初心者です。VBAとかは使わないでできますか?

  • アクセスクエリ メモ型だとエラーになる

    アクセスのテーブル1(主キーなし)に *********************************************************** フィールド1(メモ型) あああ いいい ううう いいい *********************************************************** と言うデータがあるのですが 「あああ」「ううう」は1個で「いいい」は2つあります。 これを、クエリ1で *********************************************************** SELECT テーブル1.フィールド1, Count(テーブル1.フィールド1) AS フィールド1のカウント FROM テーブル1 GROUP BY テーブル1.フィールド1; *********************************************************** と作り、 新しいクエリで *********************************************************** SELECT テーブル1.フィールド1, クエリ1.フィールド1のカウント FROM テーブル1 INNER JOIN クエリ1 ON テーブル1.フィールド1 = クエリ1.フィールド1; *********************************************************** としたいのですが、 メモ型ではダメなのでしょうか? メモ型でフィールドを宣言しつつ、 このようなクエリを作るにはどうすればいいですか? テキスト型にすると問題なくいけます。

  • アクセスのクエリで

    アクセスのクエリで、テーブルAのフィールド1が空白の場合は、0と表示し、(数値型)そうでない場合はフィールド1の値を表示するにはどの様にしたら良いですか? 誰か教えて下さい。よろしくお願いします。

  • Access更新クエリについて教えて下さい

    アクセス超初心者です。 入庫クエリでIDごとの入庫数を合計、 出庫クエリでIDごとの出庫数を合計し、 在庫クエリで在庫数を計算しています。 (入庫クエリの入庫数の合計)-(出庫クエリの出庫数の合計) 部品テーブルがあり、現在庫フィールドを作っています。 ID 部品名 現在庫 1  AAA   10 2  BBB   5 在庫クエリの在庫数を、部品テーブルの現在庫数に 代入したいと考えています。 在庫クエリを使い、テーブル作成クエリで現在庫テーブルを作成、 現在庫テーブルから更新クエリで、部品テーブルの現在庫数を 更新できるのではないかと考えたのですが、 つまづいてしまいました。 現在庫テーブル ID 在庫数 現在庫テーブルの在庫数を、IDごとに部品テーブルの現在庫に 置き換えることは可能ですか? また、その他よい方法がありましたら、教えて下さい。 ご指導のほど、よろしくお願いします。

  • accessのクエリで入力が不可能…

    【テーブルA】 フィールド1〔数値型〕 フィールド2〔テキスト型〕 フィールド3〔テキスト型〕 フィールド4〔数値型〕 【テーブルB】 フィールド1〔数値型〕 フィールド2〔テキスト型〕 フィールド3〔数値型〕 フィールド4〔テキスト型〕 となっています。 両方のテーブルを使い、クエリを作成しました。 リレーションが、テーブルAのフィールド1と、テーブルBのフィールド3に設定してあります。 このようにして作成したクエリでデータの入力ができません。 なぜでしょうか? Access2000です。

  • アクセスのリレーションシップとクエリ

    私は、アクセスの初心者です。なので、難しいことはよく分からないのですが、アクセスではある1つのフィールドをキーにしてくっつけたりすることができるじゃないですか?そのキーを設定したりするのはリレーションシップでも、クエリでも同じような感じで行うと思うのですが、その2つの違いはクエリはそれをテーブルとして表示できるのに対して、リレーションシップはただ定義するしかできずテーブルとして表示はできないのでしょうか? あと、クエリとかである条件で抽出したテーブルの1つのフィールドのSUMを出したいのですがどういった条件式を書けばいいのでしょうか? なにぶん、初心者ゆえに質問が分かりにくいと思いますが、どうかよろしくお願いします。

専門家に質問してみよう