Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

新着の投稿記事


タイトルRe^2: 雇用保険の算出に使用するクエリ
記事No42856   [関連記事]
投稿日: 2017/11/23(Thu) 19:42
投稿者mayu
今質問を読み直していて気づきましたが

記事No: 42847
> 社員の労働明細を明細テーブルから選択クエリで抽出し、
> 税金などの計算を追加クエリで給与明細テーブルへ追加しています。
記事No: 42850
> Q-従業員明細のフィールド構成・データ型も提示いただけますか。
> (クエリの元になってるテーブルということでいいですか?)
> 明細金額 数値型(長整数型

ということなので、
Q-従業員明細 は集計クエリの名前ということでしょうか。
もし、Q-従業員明細 が集計クエリで
> 明細ID  オートナンバー型 主キー
> 日報ID  数値型(長整数型)
> 日付   日付/時刻型
> 社員ID  数値型(長整数型)
> 単価   数値型(長整数型)
> 明細金額 数値型(長整数型
が、明細テーブル のフィールド構成ということでしたら

記事No: 42853 で私が記述している SQL文の

INNER JOIN [Q-従業員明細]   明細
を
INNER JOIN [明細テーブルの実際の名前]   明細
に修正し
Q_mamachanのSQLを入れ替えて( 修正して )いただけますか。
( ※ Q_mamachanを削除してから、作り直してもいいです )

タイトルRe^2: 雇用保険の算出に使用するクエリ
記事No42855   [関連記事]
投稿日: 2017/11/23(Thu) 14:54
投稿者mayu
> Q_mamachanを作成しました。
> 雇用保険有無と明細金額のパラメーターが立ち上がって
おや。

> T-社員名簿
> 雇用保険有無 Yes/No型> Q-従業員明細
> 明細金額 数値型(長整数型
ということでしたら
クエリ実行時にパラメータが出るのはおかしいですね。

T-社員名簿テーブルの YesNo型フィールドの名前は
雇用保険有無
で合ってますでしょうか。一言一句、間違いないか確認いただけますか。
Q-従業員明細クエリの中に
明細金額
というフィールドは存在してますか。
或いは、名前が異なるということが無いか再度確認いただけますか。

【 ●1 】
-----------------------------------------------------------------------------
両方のオブジェクトで、
T-社員名簿は 雇用保険有無
Q-従業員明細は 明細金額 を対象として
フィールドの存在確認と名前の完全一致を確認していただけますか。
違っていたらどう違っていたのか教えて下さい。
-----------------------------------------------------------------------------

> どれかといわれると「対応」です。
> 無理やり対応できそうなのと結合させたという感じです。

なるほど。納得しました。
クエリを作る上で、結合できないものは結合しなくていいのです。
無理やり結合したから
> 抽出されてた社員が表示されなくなってしまいます。
になったのでしょう。
解決手法は、T-税率表 のフィールド構成を変更するか否かで変わりますので後ほど。

> はい、フィールドを書き出されて説明を受けると「なるほどな」と納得できました。
納得いただけて何よりです。データベースでは
過去の履歴を参照できるよう配慮することも設計における要点の一つになります。
とはいえ、設計変更はメリットだけではなく、デメリットを生むこともありますので
後ほど、変更するかしないかを選択していただきますね。

> そうです、合計金額です。
> これは補助だったり、日当もれを書き込むフィールドです。
承知しました。用途と認識が、双方で合っているので問題はクリアです。

【 ●2 】
-----------------------------------------------------------------------------
T-税率表 に「適用年度」という数値型のフィールドを
作るかどうかをままちゃんさんに選択いただきます。つまり
 ・ 現状のフィールド構成のまま、クエリの結合方法や関数を利用して雇用保険料を算出する
 ・ フィールド構成を変更し、クエリの作り方を変えて雇用保険料を算出するか
のどちらにするかということですね。
以下に双方のメリット・デメリットを掲載しますので、ご自身でお決め下さい。
特に強制はいたしませんので、どちらでも構いません。

:変更なしの場合

[メリット]
・ テーブルの構成変更が無いので、解決への時間が短縮できる
・ 問題解決に特に難しい手法を使うわけではないので、理解が容易

[デメリット]
・ 雇用保険料率が変更になった際、税率フィールドの値を更新し忘れていると
  T-給与明細へ追加クエリを実行した時点で不正会計になる。

・ 税率を格納することが主目的のテーブルから、過去の税率が確認できないため
  過去の税率は T-給与明細 から値を参照する必要がありますが
  多数のレコードから抽出と集計を実行するという効率の悪いクエリを作らなければならない上
  マスタテーブルに無い値がトランザクションテーブルに存在することで
  ( 社員マスタに無い人物が給与明細に存在してるようなものだとお考え下さい )
  参照整合性に疑問が生じることは必定。
  また、他人から見てデータベース設計者の意図を窺い知ることが困難にもなります。

:変更ありの場合

[メリット]
・ 雇用保険料率が変更になる・据え置きのままに関係なく
  新年度の税率をテーブルに追加し忘れた場合、
  保険料率を計算するクエリの実行結果が自動的に0件になるため、不正会計になる心配が無い。
  また、レコードの追記し忘れも同時に防ぐことが出来ます。

・ 過去の税率は T-給与明細 を参照する必要はなく
  少ないレコードから簡単な抽出条件を指定するだけで確認できます。

・ 時系列の情報が付与されたデータがテーブルに格納されているため
  データをエクスポートして他への転用が容易

[デメリット]
・ テーブルのフィールド構成に変更が生じる
・ 年度毎にレコードの追加が必要になる
・ クエリが苦手な場合に限り、クエリの作り方が現状よりは少し難しくなる
-----------------------------------------------------------------------------

再度になりますが、【●1】【●2】にお答えいただけますか。

タイトルRe: 雇用保険の算出に使用するクエリ
記事No42854   [関連記事]
投稿日: 2017/11/23(Thu) 13:36
投稿者ままちゃん
ものすごく細かな説明ありがとうございます。

> もしかすると、「結合」は「対応」と考えればいいのでしょうか。
> また、値を参照する際に抽出条件に指定するフィールドは 税種ID である
> ということを仰っているのでしょうか。【●1】

どれかといわれると「対応」です。
無理やり対応できそうなのと結合させたという感じです。

> T-税率表 の改造の必要性、理解いただけたでしょうか。【●2】

はい、フィールドを書き出されて説明を受けると「なるほどな」と納得できました。


> 明細金額 というのは何でしょうか。【●3】
> ( 単価 x 労働時間 ) + 残業手当 の合計金額ということでしょうか。

そうです、合計金額です。

> 支給額1 数値型(長整数型)    △ ( 住宅補助や交通費などの諸手当? )

これは補助だったり、日当もれを書き込むフィールドです。

Q_mamachanを作成しました。
雇用保険有無と明細金額のパラメーターが立ち上がって
入力したら対応社員の明細が抽出されました。諸手当も記載されてます。

タイトル雇用保険の算出に使用するクエリ
記事No42853   [関連記事]
投稿日: 2017/11/22(Wed) 15:36
投稿者mayu
提示いただいているクエリの演算フィールドを拝見したところ
給与は、20日締め・翌月20日払い のようですね。

> T-社員名簿
> 社員ID  数値型(長整数型)主キー
> 氏名   短いテキスト
> 基本給  数値型(長整数型)
> 支給額1 数値型(長整数型)
> 厚生年金 数値型(長整数型)
> 健康保険 数値型(長整数型)
> 雇用保険有無 Yes/No型
> 扶養家族 数値型(長整数型)
及び
> Q-従業員明細
> 明細ID  オートナンバー型 主キー
> 日報ID  数値型(長整数型)
> 日付   日付/時刻型
> 社員ID  数値型(長整数型)
> 単価   数値型(長整数型)
> 明細金額 数値型(長整数型

T-社員名簿 テーブルと Q-従業員明細 クエリ には
提示いただいたデータ型のフィールドがあるということですので
私が以下に掲載する SQL から、新たに1つクエリを作って下さい。
(
  ままちゃんさんが{ T-給与明細 }テーブルへ追加するために作成されているクエリは
  年月日がテキスト型になっていて
  演算 や 比較 といった作業に適していないため
)

なお、SQL からクエリを作る方法は ↓ を参照いただけますか。
http://accessvba.blog.so-net.ne.jp/2013-11-11
( 
  SELECT ... 扶養家族 ; までを 全部 SQLビュー へコピペし、
  名前を付けて保存するだけです
)
また、作成するクエリの名前はQ_mamachanとして下さい。


SELECT DateSerial(
             Year( 明細.日付 - 20 )
           , Month( 明細.日付 - 20 ) + 1
           , 20
       ) As 締日
     , Year( 締日 )  As 年度
     , Month( 締日 ) As 月度
     , DateSerial(
             Year( 明細.日付 - 20 )
           , Month( 明細.日付 - 20 ) + 2
           , 20
       ) As 支払日
     , 社員.社員ID
     , 社員.氏名
     , 社員.基本給
     , 社員.厚生年金
     , 社員.健康保険
     , 社員.雇用保険有無
     , 社員.扶養家族
     , Sum( IIf( CCur( Nz( 明細.明細金額, 0 ) ) > 0, 1, 0 ) ) As 出勤日数
     , Sum( 
           CCur( Nz( 社員.基本給, 0 ) ) + CCur( Nz( 明細.明細金額, 0 ) )
       ) As 支給額
     , CCur( Nz( 社員.支給額1, 0 ) ) As 諸手当

FROM       [T-社員名簿]     社員
INNER JOIN [Q-従業員明細]   明細
        ON 社員.社員ID = 明細.社員ID
GROUP BY DateSerial(
               Year( 明細.日付 - 20 )
             , Month( 明細.日付 - 20 ) + 1
             , 20
         )
       , DateSerial(
               Year( 明細.日付 - 20 )
             , Month( 明細.日付 - 20 ) + 2
             , 20
         ) 
       , 社員.社員ID
       , 社員.氏名
       , 社員.基本給
       , 社員.支給額1
       , 社員.厚生年金
       , 社員.健康保険
       , 社員.雇用保険有無
       , 社員.扶養家族 ;

タイトルRe: SQLサーバー上のデータの参照
記事No42852   [関連記事]
投稿日: 2017/11/22(Wed) 08:20
投稿者TKM
解決済: ON
すみません、自己解決しました。
Callで呼び出したのが原因でした。

> OS:windows7
> Access Version:2007
>
> SQLサーバー上のテーブルを参照してExcelにフィールドをコピーするために以下のコードを作りました。
>
> ---------------------------------------------------------------------------
> Public db As ADODB.Connection
> Public Sub DbOpen()
>  Dim openFl As Boolean
>  Set db = Nothing
>  openFl = False
>  If db Is Nothing Then
>   Set db = New ADODB.Connection
>   openFl = True
>   Else
>   If db.State = adStateClosed Then
>    openFl = True
>   End If
>  End If
>  If openFl = True Then
>   db.Open "Provider=SQLOLEDB;" & _
>   "Data Source=ホスト名;" & _
>   "Initial Catalog=データベース名;" & _
>   "User Id=ユーザー名;" & _
>   "Password=パスワード;"
>  End If
>  Call GetTestData
> End Sub
>
> Public Sub GetTestData()
>  Dim rs As ADODB.Recordset
>  Dim strSQL As String
>  Application.ScreenUpdating = False
>  Set rs = New ADODB.Recordset
>
>  strSQL = "SELECT * FROM テーブル名"
>  rs.Open strSQL, db ←ここでエラー
>
>  Dim i As Integer: i = 1
>  rs.MoveFirst
>  Do Until rs.EOF
>   ThisWorkbook.Sheets("Sheets2").Cells(i, 1) = rs!フィールド名
>   ThisWorkbook.Sheets("Sheets2").Cells(i, 2) = rs!フィールド名2
>   i = i + 1
>   rs.MoveNext
>  Loop
>  rs.Close: Set rs = Nothing
>  db.Close: Set db = Nothing
> End Sub
> --------------------------------------------------------------------------------
>
> これを実行すると
> 「実行時エラー '3001':
> 引数が間違った型、許容範囲外、または、競合しています」
> とエラーが出てきます。
> 引数のSQL文はとても単純なものですし、Connectionオブジェクトのdbも接続できています。
> 一体なにが原因なのでしょうか?

タイトルRe^3: 追加クエリ内での計算
記事No42851   [関連記事]
投稿日: 2017/11/22(Wed) 01:47
投稿者mayu
各テーブルの構成を適切に開示いただいて助かります。大変だったでしょう。
私も状況がだいぶ把握できました。
一つずつ問題点を潰していきましょうか。

> ※T-社員名簿の雇用保険有無とT-税率表税種IDを結合させました。
まず、ここが最大の疑問です。

> 雇用保険有無 Yes/No型> 税種ID  数値型(長整数型)
では
データ型も値も共通するものが存在しないため、結合のしようがないと思うのです。
Yes/No型である{ 雇用保険有無 }は Yes が -1 で No が 0 です。
数値型である{ 税種ID }は  1, 2, 3  です。
どういう意図で結合を実施し、どういう結果を期待されているのか 測りかねています。

もしかすると、「結合」は「対応」と考えればいいのでしょうか。
雇用保険有りの人に対しては、T-税率表から税率を参照するようにし、
雇用保険無しの人に対しては、T-税率表から税率は参照しない。
また、値を参照する際に抽出条件に指定するフィールドは 税種ID である
ということを仰っているのでしょうか。【●1】

次に、設計で問題がある箇所を指摘させていただきますね。
良は◎、微妙は△、不適切は× とすると

> T-社員名簿
> 社員ID  数値型(長整数型)主キー ◎
> 氏名   短いテキスト       ◎
> 基本給  数値型(長整数型)    △
> 支給額1 数値型(長整数型)    △ ( 住宅補助や交通費などの諸手当? )
> 厚生年金 数値型(長整数型)    △
> 健康保険 数値型(長整数型)    △
> 雇用保険有無 Yes/No型       ◎
> 扶養家族 数値型(長整数型)    ◎
でしょうか。

基本給は、昇給・降給で一定期間ごとで変動するため
過去の基本給が別のテーブルから参照できる構成になっていれば
社員名簿の中に含めても問題ないでしょう。

厚生年金保険料や健康保険は標準報酬月額ベースですので
過去の給与と加入期間から算出し、計算方法も複雑怪奇で年間固定額ですが
通常、社員名簿の中に含める構成にはしないと思います。

> ご指摘いただいたことの返信になってますでしょうか?
> 雇用保険率は変わらない年もあるので、F-税率表というフォームを作成したので
> それを変更すればいいかなと簡単に考えてたんですが、まずいですか?(汗)

はい。まずいと思います。実際ここ2年は毎年変わっていますし
テーブルを設計する時に着目すべき点は
 ・ 保険の定義として、変動・固定のどちらの性質に属するか。
 ・ 変動するとしたら、単位は、月なのか年なのか。
になります。それを踏まえると
> T-税率表
> 税種ID  数値型(長整数型)主キーは設定してません 
> 税種   短いテキスト
> 税率   数値型(倍精度浮動小数点型)
記事No:42848でも申し上げましたが
税率の適用年度を格納するフィールドが存在しないのは不自然です。
変動が無い数年に渡る税率を1レコードで管理したい場合は

 税種ID  税種   負担  税率  開始年度 終了年度
----------------------------------------------------------
  1   雇用保険 労働者  0.006   2012   2015
  2     雇用保険  事業主  0.0105  2012   2015
    3     雇用保険  労働者   0.005   2016   2016
    4     雇用保険  事業主   0.009   2016   2016
    5     雇用保険  労働者   0.004   2017   2099
    6     雇用保険  事業主   0.008   2017   2099

という感じに出来なくもないですが、
( 来年度に税率が変わったら、2099 を 2017 に更新して新規レコード作成 )
私は、毎年レコードを作成するほうが自然だと思います。

ままちゃんさんの方針では 来年度、事業主・労働者いずれかの税率が変わったら
F-税率表で 2017年度の値 を 2018年度の値 に書き換えるということですが
履歴として歴史を刻めず、過去データも参照できずに消失してしまう
揮発性と言って差し支えないテーブルの存在価値が高いとは申し上げにくく
( 揮発させたくないからテーブルにレコードとして蓄積する )
> この税率が変わるたびにクエリのフィールドの数字を変更するの手間をはぶきたい
という問題は一向に解決しませんよね。
( 書き換えるオブジェクトがクエリからフォームにチェンジしただけ )

T-税率表 の改造の必要性、理解いただけたでしょうか。【●2】

> 明細ID  オートナンバー型 主キー
> 日報ID  数値型(長整数型)
> 日付   日付/時刻型
> 社員ID  数値型(長整数型)
> 単価   数値型(長整数型)
> 明細金額 数値型(長整数型)
これは勤怠管理ですね。
単価 は 時間給 に相当するのではないかと推測しますが
明細金額 というのは何でしょうか。【●3】
( 単価 x 労働時間 ) + 残業手当 の合計金額ということでしょうか。

> 追加クエリの追加先のT-給与明細の構成です。
年度     短いテキスト      →  数値型
月分     短いテキスト      →  数値型
年月分    短いテキスト      →  日付/時刻型
支払日    短いテキスト      →  日付/時刻型
社員ID    数値型(長整数型)
氏名     短いテキスト
基本給    数値型(長整数型)   →  通貨型
支給額    数値型(長整数型)   →  通貨型
支給額1   数値型(長整数型)   →  通貨型
厚生年金   数値型(長整数型)   →  通貨型
健康保険   数値型(長整数型)   →  通貨型
雇用保険有無 Yes/No型
雇用保険   数値型(長整数型)   →  通貨型
雇用保険率  数値型(倍精度浮動小数点型)

矢印のついている行が データ型の変更をしたほうがいいフィールドですけど
追加クエリが必要かどうかも含めて、ここは後回しにしましょう。

給与の支払いが済んでしまえば
値が変わることもなく、都度、金額を計算する必要もないことから
月次データであれば、テーブルに演算値を格納する設計でもいいでしょう。

ゆっくりでいいですから、【●1】【●2】【●3】の疑問にお答えいただけますか。

タイトルRe^2: 追加クエリ内での計算
記事No42850   [関連記事]
投稿日: 2017/11/21(Tue) 21:40
投稿者ままちゃん
ご指摘ありがとうございます。

>両テーブルの正確なフィールド構成を提示いただけますか。

社員名簿の項目は40以上ありますので
関係ありそうな項目だけアップします。

T-社員名簿
社員ID  数値型(長整数型)主キー
氏名   短いテキスト
基本給  数値型(長整数型)
支給額1 数値型(長整数型)
厚生年金 数値型(長整数型)
健康保険 数値型(長整数型)
雇用保険有無 Yes/No型
扶養家族 数値型(長整数型)

T-税率表
税種ID  数値型(長整数型)主キーは設定してません 
税種   短いテキスト
税率   数値型(倍精度浮動小数点型)
入力内容
税種ID 税種   税率
1   消費税   8
2   雇用保険税 0.004
3   会社雇保税 0.008

※T-社員名簿の雇用保険有無とT-税率表税種IDを結合させました。

>Q-従業員明細のフィールド構成・データ型も提示いただけますか。
(クエリの元になってるテーブルということでいいですか?)
明細ID  オートナンバー型 主キー
日報ID  数値型(長整数型)
日付   日付/時刻型
社員ID  数値型(長整数型)
単価   数値型(長整数型)
明細金額 数値型(長整数型

※T-社員名簿とQ-従業員明細は社員IDで結合させてます。

追加クエリの追加先のT-給与明細の構成です。
給与明細ID  数値型(長整数型)
年度     短いテキスト
月分     短いテキスト
年月分    短いテキスト
支払日    短いテキスト
社員ID    数値型(長整数型)
氏名     短いテキスト
基本給    数値型(長整数型)
支給額    数値型(長整数型)
支給額1   数値型(長整数型)
厚生年金   数値型(長整数型)
健康保険   数値型(長整数型)
雇用保険有無 Yes/No型
雇用保険   数値型(長整数型)
雇用保険率  数値型(倍精度浮動小数点型)

Q-給与追加
デザインビューのテーブル表示に
T-税率表←T-社員名簿→Q-従業員明細をおいてます。

フィールド:年度: Format(DateAdd("m",1,DateAdd("d",-20,[日付])),"yyyy""年度""")
テーブル :
集計   :グループ化
レコードの追加:年度
抽出条件 :

フィールド:月分: Format(DateAdd("m",1,DateAdd("d",-1,DateSerial(Year([日付]),Month([日付]),1))),"mm""月分""")
テーブル :
集計   :グループ化
レコードの追加:月分
抽出条件 :

フィールド:年月分: Format(DateAdd("m",0,[日付]),"yyyy\年mm""月分""")
テーブル :
集計   :グループ化
レコードの追加:年月分
抽出条件 :

フィールド:支払日: DateAdd("m",1,DateSerial(Year([日付]),Month([日付]),20))
テーブル :
集計   :グループ
レコードの追加:支払日
抽出条件 :

フィールド:社員ID  |氏名            |支給額: Nz([基本給])+Nz([明細金額])
テーブル :T-社員名簿|T-社員名簿         |
集計   :グループ化|グループ化         |演算
レコードの追加:社員ID|氏名            |支給額
抽出条件 :     |[Forms]![労務一覧]![社員名] |

フィールド:支給額1  |厚生年金  |健康保険  |雇用保険有無|基本給  |
テーブル :T-社員名簿 |T-社員名簿 |T-社員名簿 |T-社員名簿 |T-社員名簿|
集計   :グループ化 |グループ化 |グループ化 |グループ化 |グループ化|
レコードの追加:支給額1|厚生年金  |健康保険  |雇用保険有無|基本給  |
抽出条件 :      |

フィールド:雇用保険: IIf(([雇用保険有無])=True,Int([支給額]+Nz([支給額1]))*0.004)
テーブル :
集計   :演算
レコードの追加:雇用保険
抽出条件 :

フィールド:税率
テーブル :T-税率表
集計   :グループ化
レコードの追加:雇用保険率
抽出条件 :

ご指摘いただいたことの返信になってますでしょうか?
雇用保険率は変わらない年もあるので、F-税率表というフォームを作成したので
それを変更すればいいかなと簡単に考えてたんですが、まずいですか?(汗)
長くなってしまいすいませんが、よろしくお願いします。

タイトルSQLサーバー上のデータの参照
記事No42849   [関連記事]
投稿日: 2017/11/21(Tue) 16:36
投稿者TKM
解決済: ON
OS:windows7
Access Version:2007

SQLサーバー上のテーブルを参照してExcelにフィールドをコピーするために以下のコードを作りました。

---------------------------------------------------------------------------
Public db As ADODB.Connection
Public Sub DbOpen()
 Dim openFl As Boolean
 Set db = Nothing
 openFl = False
 If db Is Nothing Then
  Set db = New ADODB.Connection
  openFl = True
  Else
  If db.State = adStateClosed Then
   openFl = True
  End If
 End If
 If openFl = True Then
  db.Open "Provider=SQLOLEDB;" & _
  "Data Source=ホスト名;" & _
  "Initial Catalog=データベース名;" & _
  "User Id=ユーザー名;" & _
  "Password=パスワード;"
 End If
 Call GetTestData
End Sub

Public Sub GetTestData()
 Dim rs As ADODB.Recordset
 Dim strSQL As String
 Application.ScreenUpdating = False
 Set rs = New ADODB.Recordset

 strSQL = "SELECT * FROM テーブル名"
 rs.Open strSQL, db ←ここでエラー

 Dim i As Integer: i = 1
 rs.MoveFirst
 Do Until rs.EOF
  ThisWorkbook.Sheets("Sheets2").Cells(i, 1) = rs!フィールド名
  ThisWorkbook.Sheets("Sheets2").Cells(i, 2) = rs!フィールド名2
  i = i + 1
  rs.MoveNext
 Loop
 rs.Close: Set rs = Nothing
 db.Close: Set db = Nothing
End Sub
--------------------------------------------------------------------------------

これを実行すると
「実行時エラー '3001':
引数が間違った型、許容範囲外、または、競合しています」
とエラーが出てきます。
引数のSQL文はとても単純なものですし、Connectionオブジェクトのdbも接続できています。
一体なにが原因なのでしょうか?

タイトルRe: 追加クエリ内での計算
記事No42848   [関連記事]
投稿日: 2017/11/20(Mon) 22:07
投稿者mayu
> どうすれば対象の税率を選べるのでしょうか?
> そもそもこの考え方ではだめなのでしょうか?

現状、提示いただいている情報からだと
DLookup関数を使って税率を参照して下さい という回答になりますが
> フィールド  :税率    |税種ID
> 抽出条件   :      |2
抽出条件に 2 というマジックナンバーを指定していること自体
設計に問題がありそうです。
おそらく、根本的な解決には至らないでしょう。

> T-税率表テーブル
> 税種ID 税種   税率
> 1   所得税   8
> 2   雇用保険税 0.004
> 3   会社雇保税 0.008

T-税率表 には 税種ID, 税種, 税率 以外に列の情報が無く、
T-社員名簿 は 雇用保険の有無 しか列の情報が無い中で
> T-税率表 ← T-社員名簿を雇用保険で結合させ
というのは矛盾しています。
まずは、第三者が理解できるよう
両テーブルの正確なフィールド構成を提示いただけますか。

雇用保険の保険料率は毎年変動しますから
税率の適用年度を格納するフィールドは必要不可欠だと思うのですが。

> T-社員名簿 → Q-従業員明細の2つを社員IDで結合させて

Q-従業員明細のフィールド構成・データ型も提示いただけますか。

タイトル追加クエリ内での計算
記事No42847   [関連記事]
投稿日: 2017/11/20(Mon) 00:46
投稿者ままちゃん
OS:Win10
Access Version:2016

いつも参考にさせていただいてます。

今まで使用していた追加クエリを改良しようと思ってますが
なかなかうまくいかないので、アドバイスをいただけたらと思います。

社員の労働明細を明細テーブルから選択クエリで抽出し、税金などの計算を追加クエリで
給与明細テーブルへ追加しています。

T-社員名簿 → Q-従業員明細の2つを社員IDで結合させて
名簿の雇用保険チェックにチェックが入っている人は雇用保険の計算をして
給与明細テーブルの雇用保険欄に計算された数字が追加されます。

この税率が変わるたびにクエリのフィールドの数字を変更するの手間をはぶきたいと思い
税率表テーブルを作成しました。

雇用保険: IIf(([雇用保険の有無])=True,Int([支給額]+Nz([支給額1]))*0.004)
↑これを↓こんな風にしたい
雇用保険: IIf(([雇用保険の有無])=True,Int([支給額]+Nz([支給額1]))*[税率])

T-税率表テーブル

税種ID 税種   税率
1   所得税   8
2   雇用保険税 0.004
3   会社雇保税 0.008
と入力しました。

T-税率表 ← T-社員名簿を雇用保険で結合させ
フィールドに下記を追加してみました。

フィールド  :税率    |税種ID
テーブル   :T-税率表  |T-税率表
集計     :グループ化 |グループ化
レコードの追加:雇用保険率 | 
抽出条件   :      |2

ここで表示ボタンを押すと抽出されてた社員が表示されなくなってしまいます。
税種IDの抽出条件を消すと社員は表示されます。
でも税率は空欄のままです。
集計クエリで試すとちゃんと0.004と数字が表示されます。
テーブルのままじゃダメなのかと思い、帳票フォームでF-税率表というフォームを作成し

フィールド  :税種ID
テーブル   :T-税率表
集計     :グループ化
レコードの追加:Where 条件 
抽出条件   :[Forms]![F-税率表]![税種ID]

としてみましたが社員は表示されません

どうすれば対象の税率を選べるのでしょうか?
そもそもこの考え方ではだめなのでしょうか?
アドバイスをお願いします。

ページの先頭へ 前ページへ戻る