…資格が70件ほどあり、全ての資格ではなく一部の資格でして…
Qプラス400円になる資格の組み合わせは下記の5パターンということでしょうか。
→はい、5パターンです。
対象となる資格やパターンの可視化、及び パターンの増減に対応するため
別途、パターンの管理テーブルを作成しましょう
t_資格グループ
| 資格GRP | 資格CD |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 4 |
| 2 | 5 |
| 2 | 6 |
| 3 | 7 |
| 3 | 8 |
| 3 | 9 |
| 4 | 10 |
| 4 | 11 |
| 4 | 12 |
| 5 | 13 |
| 5 | 14 |
| 5 | 15 |
■SQL (>> 6に掲載されている「以下の表」の名前を仮に t_資格計算 とします )
SELECT 作業員CD
, Sum( total ) As 金額
FROM
(
SELECT 作業員CD
, Sum( 金額 ) As total
FROM t_資格計算
GROUP BY 作業員CD
UNION ALL
SELECT 作業員CD
, Count(1) * 400
FROM
(
SELECT x.資格GRP
, x.作業員CD
FROM
(
SELECT 資格GRP
, 資格CD
, 作業員CD
FROM t_資格グループ,
( SELECT DISTINCT 作業員CD FROM t_資格計算 ) tmp
) x
LEFT JOIN t_資格計算 y
ON x.作業員CD = y.作業員CD AND
x.資格CD = y.資格CD
GROUP BY x.資格GRP
, x.作業員CD
HAVING Count(1) = Count( y.作業員CD )
) q_plus
GROUP BY 作業員CD
) q_union
GROUP BY 作業員CD
ORDER BY 作業員CD
;
■結果
| 作業員CD | 金額 |
|---|---|
| 1 | 9,600 |
| 2 | 7,600 |
| 3 | 2,800 |
| 4 | 2,800 |
メインサブフォームで表示できればうれしいです
SQLの結果をクエリとして保存するのではなく
SQL文を直接、フォームのレコードソースに指定するといいでしょう
通報 ...
何も考えずにレス付けるんですが400ってリテラルもデータベース化できないですかね?
私が開発するなら、保守性や拡張性を考慮してテーブルへ落とし込みます
ただ、マスタ化するかどうかは要件次第ではないでしょうか
いずれに該当するのか、これは上流工程で考慮するべき項目ですから
今回のご質問では、この部分のリスクヘッジには言及しませんでした
例えば、リスク1 だけを考慮する場合は
DB化せず、SQL内のリテラルを変数にしてカバーするよう手段を講じるかもしれませんね