Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1466 / 2272 ツリー ←次へ | 前へ→

【7031】テーブルの合算 新米 06/1/5(木) 12:53 質問[未読]
【7032】Re:テーブルの合算 小僧 06/1/5(木) 13:28 回答[未読]
【7033】Re:テーブルの合算 新米 06/1/5(木) 16:54 お礼[未読]

【7031】テーブルの合算
質問  新米  - 06/1/5(木) 12:53 -

引用なし
パスワード
   Access初心者の者です。よろしくお願いします。

質問------------------------------------
同一構造のテーブルを合算したいです。

詳細------------------------------------
定期的にテーブルを作成しています。
(MDBから必要なデータを抽出して設定)

1週目結果テーブル → A1
2週目結果テーブル → A2

A1とA2を合算して
A2テーブルに表示したいです。
 ↓
その際にある1フィールドの値(Bフィールド)は
A1:Bフィールド+A2:Bフィールド → A2:Bフィールドへ設定
としたいです(以下参照)

<A1テーブル>
 ID | 氏名  | 仕事  | 作業時間
-------------------------------------------
 140  | Aさん |庶務  |  0.5
 140  | Aさん |会議  |  1.5
 150  | Aさん |勉強会 |  1.0
 160  | Aさん |外出  |  1.0

<A2テーブル>
 ID | 氏名  | 仕事  | 作業時間
-------------------------------------------
 140  | Aさん |庶務  |  1.5
 140  | Aさん |会議  |  0.5
 150  | Aさん |勉強会 |  2.0
 170  | Aさん |庶務  |  1.0

<結果>
 ID | 氏名  | 仕事  | 作業時間
-------------------------------------------
 140  | Aさん |庶務  |  3.0
 140  | Aさん |会議  |  3.0
 150  | Aさん |勉強会 |  3.0
 160  | Aさん |外出  |  1.0
 170  | Aさん |庶務  |  1.0

「結果」テーブルのようになってほしいのですが
何かよい方法があればご教授いただきたいと思っています。
説明が下手で申し訳ないのです。

よろしくお願いします。

【7032】Re:テーブルの合算
回答  小僧  - 06/1/5(木) 13:28 -

引用なし
パスワード
   ▼新米 さん:
こんにちは。

まず…投稿される前にもう一度見直して見ましょう。

>その際にある1フィールドの値(Bフィールド)は…
>以下参照

以下に Bフィールド がありません。

><結果>
> ID | 氏名  | 仕事  | 作業時間
>-------------------------------------------
> 140  | Aさん |庶務  |  3.0
> 140  | Aさん |会議  |  3.0
> 150  | Aさん |勉強会 |  3.0
> 160  | Aさん |外出  |  1.0
> 170  | Aさん |庶務  |  1.0

作業時間の計算が間違っていませんでしょうか?


さて、本題ですが、Unionクエリを使うと実現が可能ですね。

SELECT * FROM A1
UNION ALL SELECT * FROM A2;

上記SQL をクエリの SQL ビューに記述して保存。(仮にQ_Union)

 ID | 氏名  | 仕事  | 作業時間
-------------------------------------------
 140  | Aさん |庶務  |  0.5
 140  | Aさん |会議  |  1.5
 150  | Aさん |勉強会 |  1.0
 160  | Aさん |外出  |  1.0
 140  | Aさん |庶務  |  1.5
 140  | Aさん |会議  |  0.5
 150  | Aさん |勉強会 |  2.0
 170  | Aさん |庶務  |  1.0

この Q_Union を使って

SELECT ID, 氏名, 仕事, Sum(Q_Union.作業時間) AS 作業時間の合計
FROM Q_Union
GROUP BY ID, 氏名, 仕事;

という SQL で結果が出ると思われます。


一気にやるのであればサブクエリを使う方法があります。

SELECT P.ID, P.氏名, P.仕事, Sum(P.作業時間) AS 作業時間の合計
FROM [
SELECT * FROM A1
UNION ALL
SELECT * FROM A2
]. AS P
GROUP BY P.ID, P.氏名, P.仕事;

上記 SQL をクエリの SQL ビューに貼り付け結果を確認されてみて下さい。


※ 今後テーブルが増える可能性(A3,A4…)はありませんか?
  テーブルが増えるようですと、その度に SQL が変更になってしまいます。
  もしそうなのであればテーブルを増減させるのではなく、
  レコードを増減させるようなテーブル構造への変更をお勧めします。

  また結果に関してもわざわざテーブルを作成するのではなく、
  クエリで処理するのが一般的ですね。 

【7033】Re:テーブルの合算
お礼  新米  - 06/1/5(木) 16:54 -

引用なし
パスワード
   こんにちわ、小僧さん。
早速の返信ありがとうございます。

>以下に Bフィールド がありません。
>作業時間の計算が間違っていませんでしょうか?

確かにそのとおりです。お恥ずかしいです。
自分の中で作業時間=Bフィールドとなっていました。
わかりにくい説明となってしまったかと思います。申し訳ありませんでした。

>さて、本題ですが、Unionクエリを使うと実現が可能ですね。

>SELECT ID, 氏名, 仕事, Sum(Q_Union.作業時間) AS 作業時間の合計
>FROM Q_Union
>GROUP BY ID, 氏名, 仕事;

今回は、こちらの方法でやってみたところ、うまくいきました。
また、今後テーブルが増える可能性はないので今回はこれで進めようと
思っています。しかし今後の為のアドバイスまでしていただき
ありがとうございます。参考にさせていただこうと思います。

本当に大変助かりました。ありがとうございました。

1466 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free