hatena
hatena
2025/01/21 (火) 13:56:39
大変分かりやすいデータ例の提示ありがとうございます。
おかげで回答しやすいです。
提示されているテーブル名を「作業員所持資格」と仮定して回答します。
まずはパターン情報を得るための下記のようなテーブルを作成します。
資格パターン
| 資格CD | パターンCD |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
| 6 | 2 |
| 7 | 3 |
| 8 | 3 |
| 9 | 3 |
| 10 | 4 |
| 11 | 4 |
| 12 | 4 |
| 13 | 5 |
| 14 | 5 |
| 15 | 5 |
「作業員所持資格」と「資格パターン」テーブルから下記のようなクロス集計クエリを作成します。

隠れている「加算手当金:」の式は下記にしてください。
加算手当金: IIf(Count([資格パターン].[パターンCD])=3,400,0)
また「クエリ列見出し」も「1,2,3,4,5」と設定してください。
SQLビューなら下記のコードになります。
TRANSFORM IIf(Count([資格パターン].[パターンCD])=3,400,0) AS 加算手当金
SELECT 作業員所持資格.作業員CD, Sum(作業員所持資格.金額) AS 手当金計
FROM 作業員所持資格 LEFT JOIN 資格パターン ON 作業員所持資格.資格CD = 資格パターン.資格CD
GROUP BY 作業員所持資格.作業員CD
PIVOT 資格パターン.[パターンCD] In (1,2,3,4,5);
上記のクエリの結果は下記になります。
| 作業員CD | 手当金計 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| 1 | ¥8,800 | 400 | 400 | 0 | 0 | 0 |
| 2 | ¥7,200 | 0 | 0 | 400 | 0 | 0 |
| 3 | ¥2,800 | 0 | 0 | 0 | 0 | 0 |
| 4 | ¥2,800 | 0 | 0 | 0 | 0 | 0 |
これをメインフォームのレコードソースにして、
加算を含む手当金のテキストボックスのコントロールソースに下記の式を設定します。
=[手当金計]+[1]+[2]+[3]+[4]+[5]
通報 ...
という要件を全て満たす場合は、以下のSQLでもご希望の結果になりそうですね
この固定条件ならこちらの方が私のよりシンプルでいいですね。
mayuさんの最初のSQLだと、パターン数やパターン内件数が固定でなくても対応できるのでより対応範囲が広いですね。
たくさんの解答ありがとうございます。
Accessの可能性って無限大ですね。
昨日hatenaさんの式でうまく作動しました。
ただ、リレーションシップで詰まってしまい、返信が遅くなってしましました。
hatenaさんの解答とても分かりやすかったです。ありがとうございます。
mayuさん。私がSQLってだけで苦手意識あったのですが、
mayuさんのSQLは初心者のとても見やすく感動しました。
私がSQLは全く知識ないので、これから参考に勉強させていただきますね。
一緒に考えてくださり本当にありがとうございます。
まだ完結してませんが、お陰様で求めている結果が表示できました。
本当にありがとうございます。