Microsoft Access 掲示板

条件付きのクエリ作成について / 8

15 コメント
views
8

大変分かりやすいデータ例の提示ありがとうございます。
おかげで回答しやすいです。

提示されているテーブル名を「作業員所持資格」と仮定して回答します。

まずはパターン情報を得るための下記のようなテーブルを作成します。

資格パターン

資格CDパターンCD
11
21
31
42
52
62
73
83
93
104
114
124
135
145
155

「作業員所持資格」と「資格パターン」テーブルから下記のようなクロス集計クエリを作成します。

画像1

隠れている「加算手当金:」の式は下記にしてください。

加算手当金: 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手当金計12345
1¥8,800400400000
2¥7,2000040000
3¥2,80000000
4¥2,80000000

これをメインフォームのレコードソースにして、
加算を含む手当金のテキストボックスのコントロールソースに下記の式を設定します。

=[手当金計]+[1]+[2]+[3]+[4]+[5]
通報 ...
  • 9
    • パターンCDの番号は5種類で固定
    • パターンCD毎のデータ件数は3で固定
    • 資格パターン テーブルにおける 資格CD 列の値は重複が発生しない

    という要件を全て満たす場合は、以下のSQLでもご希望の結果になりそうですね

    SELECT x.作業員CD
         , Sum(x.金額)
               + IIf(sum(IIF(y.パターンCD = 1, 1, 0 )) = 3, 400, 0)
               + IIf(sum(IIF(y.パターンCD = 2, 1, 0 )) = 3, 400, 0)
               + IIf(sum(IIF(y.パターンCD = 3, 1, 0 )) = 3, 400, 0)
               + IIf(sum(IIF(y.パターンCD = 4, 1, 0 )) = 3, 400, 0)
               + IIf(sum(IIF(y.パターンCD = 5, 1, 0 )) = 3, 400, 0) As 金額
    FROM 作業員所持資格 x
    LEFT JOIN 資格パターン y
           ON x.資格CD = y.資格CD
    GROUP BY x.作業員CD
    ;
    
    10

    この固定条件ならこちらの方が私のよりシンプルでいいですね。

    mayuさんの最初のSQLだと、パターン数やパターン内件数が固定でなくても対応できるのでより対応範囲が広いですね。

    14
    しおこんぶ 2025/01/22 (水) 09:31:14 a6738@80964 >> 9

    たくさんの解答ありがとうございます。
    Accessの可能性って無限大ですね。

    昨日hatenaさんの式でうまく作動しました。
    ただ、リレーションシップで詰まってしまい、返信が遅くなってしましました。
    hatenaさんの解答とても分かりやすかったです。ありがとうございます。

    mayuさん。私がSQLってだけで苦手意識あったのですが、
    mayuさんのSQLは初心者のとても見やすく感動しました。
    私がSQLは全く知識ないので、これから参考に勉強させていただきますね。
    一緒に考えてくださり本当にありがとうございます。

    まだ完結してませんが、お陰様で求めている結果が表示できました。
    本当にありがとうございます。