- 締切済み
集計方法のアドバイスほしいです!
大急ぎで作らなくてはならないクエリがあるのですが、どうもうまくいきません。。。 テーブル項目には ・お小遣いをくれる人 ・お小遣いの額 ・もらえる期間の開始月 ・もらえる期間の終了月 を持っています。 レコードのサンプル年は くれる人,小遣い額 ,開始月 ,終了月 aさん \1000 ,2008/01 ,2008/10 bさん \2000 ,2008/03 ,2008/12 cさん \500 ,2008/03 ,2008/04 といった感じです。 これを月別にいくらもらえるか合計値を求めたいのですが、 どうもうまくいきません。 私がやった方法としては、 「年月」という項目のみもった月テーブル(2000/01~2999/12というデータ入力済み)をつくり、以下のSQLで小遣いテーブルとぶつけるというものです。 select 月テーブル.年月, (select sum(小遣いテーブル.小遣い額) from 小遣いテーブル where 月テーブル.年月 between 小遣いテーブル.開始月 and 小遣いテーブル.終了月) as 合計額 from 月テーブル データベースソフトはaccessです。 SQLが間違っているのでしょうか? エラー文を見る感じだとaccessではスカラサブクエリが使えないのかな?という感じもするのですが。。。 そもそも、もっといい解決案があったらぜひともご教示いただければと思います。課題とかではなく、頼まれごとなのですが、なかなかできずあせっています- -;
- みんなの回答 (4)
- 専門家の回答
みんなの回答
#1です。見当違いのアドバイスをしてしまってごめんなさい。合計はクエリーでできるようですが、抽出条件をどう設定すればよいか、私は復習しないとわかりません。ごめんなさい。
- CHRONOS_0
- ベストアンサー率54% (457/838)
月別に求めたいとなると月テーブルを作る方法が一番いいでしょうね 作り方は小遣いテーブルと月テーブルから 毎月誰がいくらくれるかのクエリを作りそれを集計することになります SELECT 小遣いテーブル.くれる人, 小遣いテーブル.小遣い額, 月テーブル.毎月 FROM 小遣いテーブル, 月テーブル WHERE 月テーブル.毎月 Between [開始月] And [終了月] このクエリから集計クエリを作ります 一つのクエリでやりたければ SELECT QQ.毎月, Sum(QQ.小遣い額) AS 小遣い額の合計 FROM (SELECT 小遣いテーブル.くれる人, 小遣いテーブル.小遣い額, 月テーブル.毎月 FROM 小遣いテーブル, 月テーブル WHERE 月テーブル.毎月 Between [開始月] And [終了月]) as QQ GROUP BY QQ.毎月; 月 小遣い額の合計 2008/01/01 \1,000 2008/02/01 \1,000 2008/03/01 \3,500 2008/04/01 \3,500 2008/05/01 \3,000 2008/06/01 \3,000 2008/07/01 \3,000 2008/08/01 \3,000 2008/09/01 \3,000 2008/10/01 \3,000 2008/11/01 \2,000 2008/12/01 \2,000
- jamshid6
- ベストアンサー率88% (591/669)
解決したようなので、補足ですが、こういう場合は内部結合するのが一般的だと思います。 SELECT d.年月, SUM(k.小遣い額) FROM 月テーブル d INNER JOIN 小遣いテーブル k ON d.年月>=k.開始月 AND d.年月<=k.終了月 GROUP BY d.年月 なお、月テーブルを全く用意しない方法はないと思いますよ。 それは小遣いテーブルに1レコードしかないケースを考えてみればわかります。データは1行、欲しい結果は(例えば)10行だとすると、UNION以外では1行のデータをどういじくりまわしても10行にすることはできません。今回のケースではUNIONしようとしても回数がデータの内容に依存してきますので、UNIONも使えません。 ということで月テーブルを作るというのは間違っていないと思います。 (さすがに件数が多いので、私だったら年テーブルと月テーブルを別に作成してCROSS JOINするかもしれませんが、大した違いではないでしょう)
チュートリアルで習いましたが、確認する時間がないので、とりあえず記憶の範囲内でお答えします。 フォームで抽出条件を指定したり、その合計を求めたりできたと思いますので、フォームをあたって見られたらどうでしょうか。
お礼
回答ありがとうございました。 フォームとは何のことでしょうか? もしよろしければ教えていただけるとた助かります。 一応SQLをいじって月別合計を求めることはできました。 しかし月テーブルを用意しない方法がありそうなんですよね。。^^;