<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
 MS-Access2002チョ〜入門部屋>クエリを極める
  



 menu

59. 手当て一覧から売上金額に見合った手当て額を割り出す

これもかなり難易度高いですね・・・。難しいっていうか、できないっていうか・・・。

うちの会社ね、売上金額によって、手当てが支払われることになってるんです。
いちおう、こんな感じの一覧テーブル↓があるので、ここから該当の手当て額を探します。

このテーブルって、[社員テーブル]とどういう形で結びつければいいんでしょう?
[売上]と・・・[該当金額]???

ミーコさんは売上が900000000000円なんで、E以上F以下ってところで、うちの社の規定で行くとの415円が手当てとして支払われるはずなんですが、じゃあ、このテーブルどうし、[売上]----[該当金額]で結びつければいいんかいな???
結びつかないです。結びつかないですよね。だって、Fの該当金額のところに入ってるのは"10000000000000"であって、900000000000ではありません。このフィールド同士結合しても、しょうがないですよね。
結合フィールドの値が一致してこそ、初めてテーブル同士の結びつきが成立するんです。こりゃできません。

できないので・・・・あきらめるってのも一つの手なんですけどね。
今日はひとつ血のにじむような苦労してみましょう。ごいっしょに。

考え方としては・・・。
該当金額の「いくらから」と「いくらまで」を見て、[売上]がその範囲に属するかどうかを見極めます。

いくらからいくらまで、を横に並べるためには、55.の方法で、ある程度いけると思います。
ひとつ後のレコードの値を横に並べて参照できるような表を作るわけです。

こんなふうに考えてみようと思ってるんですよ。↑
右側の表をなんとかして作って、[売上]が「[いくらから]より多くて[いくらまで]以下」のレコードだけ抽出するようにしようと思うんです。
まずは、テーブルをわざと2回選んで結合線をつけずに総当たり戦にする「直積」で、右側の表を作ってみましょう。

こんな感じになります↑
でもって、[該当金額]([手当てテーブル_1]の方のやつ)の抽出条件欄にSQL文を入力してサブクエリにします。

と、結果はこんな感じになりそうです。とりあえず。右側にならんでます?

この時点でクエリをSQL表示にすると↓こんな感じになってると思います。

どうしてもうまく作れなかったら、このSQL文を貼り付けて使ってください。(貼り付け方等は29.参照)

そしたらこのクエリに[社員テーブル]を加えて、[売上]の金額と比較できるようにします。

結合線はいりません。っていうか、結合するフィールドないですもんね。

[売上]と[名前]を選んでおきましょうか。
この状態だと、やっぱり結合線がないために[手当てテーブル]と[社員テーブル]の総当たり戦になります。
[該当金額]が2列並びますけれど、左のほうが[手当てテーブル_1]からとってきた「いくらから」に当たる金額。
右のほうが[手当てテーブル]からとってきた「いくらまで(以下)」にしようと思ってる金額です。

それぞれ、オレンジで印をつけたレコードだけ出すように、[売上]に対して抽出条件を加えます。
以上、以下、未満・・・の不等号のつけ方を気をつけないといけませんね。
こんな感じにすればいいんじゃないかな・・・↓

で、あとは、[名前]とかが左のほうにあったほうがよさげかな、と思ったら、フィールドセレクタのところをうまいことドラッグして移動させてしまいましょう。

そしたら、肝心の[手当て額]も選んで・・・。[手当てテーブル]から選びましょう。
後は、[該当金額]は非表示でもいいかもしれませんね。100001円〜10000000円、っていう表示にできればいいんですけれど、このままだとそうはいきませんから、だったらいっそのこと表示しないほうがいいかも・・・。

結果はこんな感じかな↓

あるいはこんなふうに↓、[手当てテーブル]のほうだけ「いくらまで」なんていう列名をつけて表示させるようにしておけば・・。

「あともう少しで次のランクに上がれるぞ!がんばるぞ!」って、みんなのモチベーションが上がりそうです。

それにしても、売上のわりに手当てが少ないですねぇ・・・。

このクエリだと、「売上がゼロ円」のネコは出てきません。
いちおう、[手当てテーブル]では、0円だと手当てなしってことにしてますので・・・。

また、売上が1000000000000000円を超えるネコ」がいたとしても、出てきません。
要は、[手当てテーブル]に該当金額がないような[売上]の場合は、出てこないわけです。
この辺の微調整がさらに必要になる場合もあるかもしれませんね・・・。
うーん、けっこう難しいなぁ。


【参考:SQL文で書くと?】