Access VBA質問箱 IV

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

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


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

【5545】テーブル作成 ハナコ 05/6/29(水) 11:12 質問[未読]
【5547】Re:テーブル作成 小僧 05/6/29(水) 13:05 回答[未読]
【5548】Re:テーブル作成 アヤ 05/6/29(水) 18:34 質問[未読]
【5552】Re:テーブル作成 小僧 05/6/29(水) 22:55 回答[未読]
【5558】Re:テーブル作成 アヤ 05/7/1(金) 23:44 お礼[未読]

【5545】テーブル作成
質問  ハナコ  - 05/6/29(水) 11:12 -

引用なし
パスワード
   ハナコです。ACCESSの初心者です。夏のボーナスの時期ですが次のような処理をしたいのですがどなたかお知恵をお貸しください。
ボーナス査定の資料を本年4月在籍者と前年夏に支給した実績データを一覧表に作成したいのです。データは4月在籍者のデータ(テーブルA)と前年夏データ(テーブルB)があります。テーブルAは4月入社のデータがあり、4月までに退職した人は当然ありません(テーブルBの人が4月までに退職すればテーブルAにはありません)。
テーブルAとテーブルBのデータを社員番号をキーにしてテーブルCのデータを作成したいのです。
クエリで作成すると両方に社員番号が存在するデータのみが作成され、4月入社のデータとか、退職者のデータが作成できません
クエリで作成する方法か、VBAで作成するコードをお教えください。お願いします。

【5547】Re:テーブル作成
回答  小僧  - 05/6/29(水) 13:05 -

引用なし
パスワード
   ▼ハナコ さん:
こんにちは。

テーブルAとテーブルBのフィールド構成がまったく同じでしたら

SELECT * FROM テーブルA
UNION
SELECT * FROM テーブルB

上記のSQLをクエリのSQLビューに貼り付けて確認してみて下さい。
外していたら申し訳ありません。

【5548】Re:テーブル作成
質問  アヤ  - 05/6/29(水) 18:34 -

引用なし
パスワード
   ▼小僧 さん:
>▼ハナコ さん:
>こんにちは。
>
>テーブルAとテーブルBのフィールド構成がまったく同じでしたら
>
>SELECT * FROM テーブルA
>UNION
>SELECT * FROM テーブルB
>
>上記のSQLをクエリのSQLビューに貼り付けて確認してみて下さい。
>外していたら申し訳ありません。

小僧さん
こんにちは。

SQLビューに貼り付けると言うことですが、もう少し細かく教えて下さい
テーブルA  社員番号、本年基本給
テーブルB  社員番号、前年基本給、前年支給率、前年支給額
テーブルC  社員番号、本年基本給、本年支給率、本年支給額、前年基本給、前年支給      率、前年支給額
テーブルAとテーブルBからテーブルCを作成したいのです。コードの書き方を教えて下さい。

【5552】Re:テーブル作成
回答  小僧  - 05/6/29(水) 22:55 -

引用なし
パスワード
   ▼アヤ さん:
こんばんは。

一応回答を先に…。

SELECT Q.社員番号, テーブルA.本年基本給, '' AS 本年度支給率, '' AS 本年度支給額,
テーブルB.前年度基本給, テーブルB.前年支給率, テーブルB.前年度支給額
FROM ([
SELECT 社員番号
FROM テーブルA
UNION
SELECT 社員番号
FROM テーブルB
]. AS Q
LEFT JOIN テーブルA ON Q.社員番号 = テーブルA.社員番号)
LEFT JOIN テーブルB ON Q.社員番号 = テーブルB.社員番号;

[挿入] → [クエリ] → [デザインビュー] でテーブルを選択しないで[閉じる]

[表示] → [SQLビュー] を選択。

表示されている「SELECT;」を消して上記SQLを記載し

[表示] → [データシートビュー] で確認してみて下さい。


テーブルの設計について疑問があるのですが、
このツールは今回だけのものなのでしょうか?
冬にも賞与はありますし、このままですと翌年にも対応できないと思われます。
その度にテーブルを追加すると、またクエリも作り直しとなってしまいます。

また、「本年基本給」と「本年支給額」から「本年度支給率」が計算できる場合、
テーブルにはフィールドを持たせずクエリで処理するのが一般的かと思われます。

テーブル設計がしっかりしていないとフォームやモジュールにも影響を与えるので
「テーブルの正規化」をキーワードにテーブル構成の再考をされてみては
いかがでしょうか?

【5558】Re:テーブル作成
お礼  アヤ  - 05/7/1(金) 23:44 -

引用なし
パスワード
   ▼小僧 さん:
>▼アヤ さん:
>こんばんは。
>
>一応回答を先に…。
>
>SELECT Q.社員番号, テーブルA.本年基本給, '' AS 本年度支給率, '' AS 本年度支給額,
>テーブルB.前年度基本給, テーブルB.前年支給率, テーブルB.前年度支給額
>FROM ([
>SELECT 社員番号
>FROM テーブルA
>UNION
>SELECT 社員番号
>FROM テーブルB
>]. AS Q
>LEFT JOIN テーブルA ON Q.社員番号 = テーブルA.社員番号)
>LEFT JOIN テーブルB ON Q.社員番号 = テーブルB.社員番号;
>
>[挿入] → [クエリ] → [デザインビュー] でテーブルを選択しないで[閉じる]
>
>[表示] → [SQLビュー] を選択。
>
>表示されている「SELECT;」を消して上記SQLを記載し
>
>[表示] → [データシートビュー] で確認してみて下さい。
>
>
>テーブルの設計について疑問があるのですが、
>このツールは今回だけのものなのでしょうか?
>冬にも賞与はありますし、このままですと翌年にも対応できないと思われます。
>その度にテーブルを追加すると、またクエリも作り直しとなってしまいます。
>
>また、「本年基本給」と「本年支給額」から「本年度支給率」が計算できる場合、
>テーブルにはフィールドを持たせずクエリで処理するのが一般的かと思われます。
>
>テーブル設計がしっかりしていないとフォームやモジュールにも影響を与えるので
>「テーブルの正規化」をキーワードにテーブル構成の再考をされてみては
>いかがでしょうか?


小僧さん

ありがとうございました。やっと教えていただいたコードを理解することができますた。また、テーブル設計についてのアドバイスもありがとうございました。定型的にできるようによく考えて見ます。本当にありがとうございました。

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