Access初心者です。Accessで資格表の作成をしています。
資格A 1000円
資格B 1000円
資格C 1000円
普通に計算すると3000円なのですが、
資格全て所持している人に対して400円加算される式が作りたいです。
3つ資格持っている人は、3400円という結果になります。
資格、A,B(A,Cも同様)の2つの資格しか持っていない人は適用されないため、2000円です。
このような式はクエリで作成可能でしょうか?
よろしくお願いいたします。
Access初心者です。Accessで資格表の作成をしています。
資格A 1000円
資格B 1000円
資格C 1000円
普通に計算すると3000円なのですが、
資格全て所持している人に対して400円加算される式が作りたいです。
3つ資格持っている人は、3400円という結果になります。
資格、A,B(A,Cも同様)の2つの資格しか持っていない人は適用されないため、2000円です。
このような式はクエリで作成可能でしょうか?
よろしくお願いいたします。
作成可能と思われます。
回答するには、下記の情報が必要です。
対象のテーブル名
テーブル内のフィールド名、データ型
データ例
返答がないのでとりあえず下記のようなテーブル構成だと仮定して回答します。
所持資格テーブル
クエリのデザインビューで下記のように設定します。
SQLなら下記になります。
出力結果
返信が遅くなり申し訳ありません。
解答ありがとうございます。式はうまく作動しました。
私の説明不足で大変申し訳ないのですが…資格が70件ほどあり、全ての資格ではなく一部の資格でして…
また、所持、未更新という項目があり、所持なら金額表示、未更新なら金額をゼロとしていしています。
一度切の物や、毎年試験する資格があり、落ちると未更新になります。
不慣れなもので、画像を参照して頂ければ嬉しいです。
メインフォームに作業員CDがあり、サブフォームに資格CDの入力をしています。
作業員一人に対して
資格CD1、2、3があればプラス400円
資格CD4,5,6があればプラス400円
・
・
・
(資格CD15まで続きます)
資格CD16以降からはプラス料金はなく、単体の手当金のみになります。
手当金は1千円台から9千円台まであります。
手当金は資格に対する金額であって本人に支給されるのは、所持している人のみの「金額」になります。
いかがでしょうか…?
すみません。画像貼りなおします。

プラス400円になる資格の組み合わせは下記の5パターンということでしょうか。
資格CD1,2,3
資格CD4,5,6
資格CD7,8,9
資格CD10,11,12
資格CD13,14,15
また、一人の作業員が2パターン以上の資格を持っている場合は、それぞれのパターン毎にプラス400円になるのでしょうか。
例えば、資格CD1,2,3,4,5,6を持っていたらプラス800円になるのでしょうか。
また、結果はクエリとして一覧表示したいのでしょうか。
それとも現状のメインサブフォームで表示出来ればいいのでしょうか。
できればデータ例と希望の結果をマークダウン書式の表として提示してもらえると回答しやすいです。
マークダウン書式については下記に説明がありますので参照してください。
Microsoft Access 掲示板 の使い方 Microsoft Access 掲示板 - zawazawa
上記で説明してありますが、下記のサイトで簡単にマークダウンテーブルが作成できます。
Markdown Tables generator - TablesGenerator.com
テーブルデータのコピーアンドペーストで簡単に作成できます。
希望結果はエクセルで作成してそれをコピーアンドペーストで簡単に作成できます。
返信ありがとうございます。
Qプラス400円になる資格の組み合わせは下記の5パターンということでしょうか。
資格CD1,2,3
資格CD4,5,6
資格CD7,8,9
資格CD10,11,12
資格CD13,14,15
→はい、5パターンです。
Q一人の作業員が2パターン以上の資格を持っている場合は、それぞれのパターン毎にプラス400円になるのでしょうか。
→はい、パターン毎にプラス400円です。
Q資格CD1,2,3,4,5,6を持っていたらプラス800円になるのでしょうか。
→はい、作用員一人に対して1パターンにつきプラス400円なので、2パターンなら800円、3パターンなら1200円追加されます。
不慣れで見にくい返信で申し訳ございませんでした。
以下の表で少し見やすいでしょうか・・・?
結果
Qまた、結果はクエリとして一覧表示したいのでしょうか。
それとも現状のメインサブフォームで表示出来ればいいのでしょうか。
→メインサブフォームで表示できればうれしいです。
参照ページの添付までありがとうございます。
これからも精進してまいりますので、よろしくお願いいたします。
対象となる資格やパターンの可視化、及び パターンの増減に対応するため
別途、パターンの管理テーブルを作成しましょう
t_資格グループ
■SQL (>> 6に掲載されている「以下の表」の名前を仮に t_資格計算 とします )
■結果
SQLの結果をクエリとして保存するのではなく
SQL文を直接、フォームのレコードソースに指定するといいでしょう
何も考えずにレス付けるんですが400ってリテラルもデータベース化できないですかね?
私が開発するなら、保守性や拡張性を考慮してテーブルへ落とし込みます
ただ、マスタ化するかどうかは要件次第ではないでしょうか
いずれに該当するのか、これは上流工程で考慮するべき項目ですから
今回のご質問では、この部分のリスクヘッジには言及しませんでした
例えば、リスク1 だけを考慮する場合は
DB化せず、SQL内のリテラルを変数にしてカバーするよう手段を講じるかもしれませんね
大変分かりやすいデータ例の提示ありがとうございます。
おかげで回答しやすいです。
提示されているテーブル名を「作業員所持資格」と仮定して回答します。
まずはパターン情報を得るための下記のようなテーブルを作成します。
資格パターン
「作業員所持資格」と「資格パターン」テーブルから下記のようなクロス集計クエリを作成します。
隠れている「加算手当金:」の式は下記にしてください。
また「クエリ列見出し」も「1,2,3,4,5」と設定してください。
SQLビューなら下記のコードになります。
上記のクエリの結果は下記になります。
これをメインフォームのレコードソースにして、
加算を含む手当金のテキストボックスのコントロールソースに下記の式を設定します。
という要件を全て満たす場合は、以下のSQLでもご希望の結果になりそうですね
この固定条件ならこちらの方が私のよりシンプルでいいですね。
mayuさんの最初のSQLだと、パターン数やパターン内件数が固定でなくても対応できるのでより対応範囲が広いですね。
たくさんの解答ありがとうございます。
Accessの可能性って無限大ですね。
昨日hatenaさんの式でうまく作動しました。
ただ、リレーションシップで詰まってしまい、返信が遅くなってしましました。
hatenaさんの解答とても分かりやすかったです。ありがとうございます。
mayuさん。私がSQLってだけで苦手意識あったのですが、
mayuさんのSQLは初心者のとても見やすく感動しました。
私がSQLは全く知識ないので、これから参考に勉強させていただきますね。
一緒に考えてくださり本当にありがとうございます。
まだ完結してませんが、お陰様で求めている結果が表示できました。
本当にありがとうございます。
mayuさん提案のように資格パターンの管理ができるようになるとベストだと思いますが、考え方としては>> 2のhatenaさんの内容でも十分行けると思います
肝となるのは
Count(資格)>=3部分で、集計結果から資格パターンにマッチするような集計を行えばいいので、たとえば、「資格1,2,3をすべて所持している」ならSum(IIf([資格CD] In (1,2,3),1,0)=3で表現できます5パターンすべてを合算すると、
ですね
1行につなげて見にくくなるようなら各資格ごとのグループでフィールドを作成して最後に合計する形でもいいと思います
hirotonさん
イフ関数での簡易的な式ありがとうございます。
先日に続き解答してくださり、感謝の気持ちでいっぱいです。
こちらも参考にさせていただきますね。ありがとうございます。