MS Access 2007 に 4 つのフィールドを持つテーブルがあります。
- 人件費
- 労働時間
- バット
- 合計
「労働時間」に「人件費」を掛けるにはどうすればいいですか? 「VAT」を足して、「合計」に答えを表示します
フォーム、クエリ、またはテーブルのどこに式を配置しますか?
助けてくれてありがとう
スコット
MS Access 2007 に 4 つのフィールドを持つテーブルがあります。
「労働時間」に「人件費」を掛けるにはどうすればいいですか? 「VAT」を足して、「合計」に答えを表示します
フォーム、クエリ、またはテーブルのどこに式を配置しますか?
助けてくれてありがとう
スコット
ダミーの (つまり、SQL ではない) 方法もあります。まず、テーブルから total 列を削除します。この演習では、テーブルの名前が "Labour" であると仮定します。
新しいクエリを作成してデザイン ビューで表示し、Labor テーブルからすべてのフィールドを追加して (すべてが機能していることを確認できるように)、空のフィールドを選択し、右クリックしてドロップダウン リストから [ビルド] を選択します。Expression Builder ウィンドウが表示されます。
計算フィールドの名前 (labourTotal など) を入力し、その後にコロン ":" を付けてから、追加するフィールド名を [式ビルダー] ウィンドウの左下にある [テーブル] から選択し、それぞれをダブルクリックします。各フィールドは、「Total:」に続いて式ビルダーに表示されます。各 "«Expr»" を "+" に置き換えます。式ビルダーで次のように表示されるはずです: "labourTotal: [Labour]![Labour Cost] + [Labour]![Labour Hours] + [Labour]![Vat] ". [OK] をクリックしてクエリを実行します。問題がなければ、合計列に結果が表示されます。
おそらく「合計」列は必要ありません。
クエリまたはレポートは、おそらく次のようになります。
SELECT [Total] = [Labour Cost] * [Labour Hours] + [VAT]
フォームまたはレポートのコントロールで同じ種類の数式を使用できます。
本当に[合計]列のデータを更新する必要がある場合:
UPDATE YourTableName SET [Total] = [Labour Hours] * [Labour Cost] + [VAT]
ただし、はるかに優れたアプローチは、テーブルからTotal列を完全に削除し、クエリを作成することです。
SELECT [Labour Cost],
[Labour Hours],
[VAT],
[Labour Hours] * [Labour Cost] + [VAT] AS [Total]
FROM YourTableName
このアプローチが推奨される理由は、誤って[合計]列に誤った情報を入力することを防ぐためです。一般に、注意しないとデータが非常に簡単に破損する可能性があり、修正するのが非常に困難になる可能性があります(不可能ではないにしても)。「データベースの正規化」をグーグルで検索して、少し読んでみることをお勧めします。これは非常に役立ちます。
あなたの VAT % について、私が明白なことを述べていないことを願っていますが、小数を入力する必要があります。たとえば、.175 は 17.5% です。
パーセンテージを足すだけではなく、何かを掛ける必要があります。また、元の金額の 100% を含める必要があります。したがって、17.5% を追加するには、1.175 を掛ける必要があります。したがって、i) 100% を自動的に含めたい (つまり、.175 と入力するだけでよい)、ii) VAT を全額に追加する、iii) 「指定」とは、クエリが実行されるたびに VAT の入力を求められるようにしたい。次に、式は次のようになります。
合計: ([一般経費]![人件費]*[一般経費]![労働時間]+[材料費]) * (1+ [付加価値税を小数で入力しますか?])
新しいクエリを作成します。
テーブルを追加
合計以外の 3 つのフィールドをクエリに追加します
新しいフィールド タイプ:
total: [VAT] + [Labour Hours] * [Labour Cost]
クエリを実行
スコットは次のように述べています。
基本的には、画面とレポートに合計を表示できるように計算したいだけです。
一部の人が示唆しているように、保存したクエリで計算を行い、レポートとフォームの両方のレコードソースとして使用できます。
しかし、そうしないことをお勧めします。できるだけ遅い時間に計算することをお勧めします。レポートの場合、これは、実行する計算をコントロールソースとして持つレポートをコントロールできることを意味します。そうすれば、ページがフォーマットされた時点で印刷される行に対してのみ実行されます。
合計フィールドで並べ替えまたはフィルター処理する場合を除いて、フォームについても同じことをお勧めします。フォームの計算フィールドは、並べ替えやフィルター処理に使用できず、状況によっては表示が非常に遅くて煩わしい場合があります。その場合、データを実際に表示する前にすべての行に対して計算する正当な理由があるため、クエリ/レコードソースにそれらを入れないようにという私のアドバイスを無視してください。
ただし、一般的には、グループとして操作 (フィルター処理、並べ替え、グループ化) を行わないレコードソースに計算を入れないでください。
計算フィールドとして、クエリまたはフォームに配置できます。意味のあるところはどこでも、シンプルで、適切なレベルの再利用性があります。計算がデータの形式またはビューに固有のものである場合は、その場所またはクエリで実行します。
この場合、合計が頻繁に使用される値であり、論理的に行に適用されることが予測できるため、計算フィールドにすることが適切です。計算フィールドには、データが変更された場合にのみ再計算するように設定できるという利点があります (ほとんどのシステムでは、MSAccess についてはわかりません)。
数量と配送リード タイムの比率を計算している場合、それは特定のフォーム/レポートのクエリに入力するものであり、再利用されることはなく、より重い計算になる可能性があるためです。
通常、別の計算の結果に依存しない限り、クエリで計算を行うことを選択します。クエリで計算を行うと、面倒になる可能性があるため、フォーム/コードで実行します。
要約すると、その計算に適した場所ならどこでも。