2017-01-27 9 views
1

私は2つのテーブルを持っています。MS Accessでは、テーブルレコードを現在の値に加えて、別のテーブルのレコード数に更新するにはどうすればよいですか?

**tblMonthlyData** 
ReportMonth | TotalItems | TotalVariances 
Jan   | 5   | 0 
Feb   | 1   | 1 
Mar   | 2   | 0 
Apr   | 8   | 4 
May   | 4   | 0 
Jun   | 5   | 0 
Jul   | 3   | 0 
Aug   | 5   | 0 
Sep   | 9   | 3 
Oct   | 1   | 0 
Nov   | 7   | 0 
Dec   | 6   | 0 

**tblDailyData** 
ID | ItemNum | CountedQty | SystemQty | Variance 
1 | Item1 | 4   | 4   | 0 
2 | Item2 | 8   | 5   | -3 
3 | Item3 | 1   | 2   | 1 
4 | Item4 | 6   | 4   | -2 

明確にするために、我々は、上記のtblDailyDataは今日、2017年1月27日に行わカウントからであると言うでしょう。 Varianceは、両方の数量項目のデータに基づく計算項目です。

私は(すなわち、カウントが毎日行われており、各カウントデータがtblMonthlyDataに適切な月に追加する必要がある)のカウントの日付に基づいてtblMonthlyDataTotalItemstblDailyData内のレコードの数を追加しようとしています。上記の例では、Janレコードの場合、のTotalItemsに4(レコード数)を追加する必要があります。その結果、更新されたレコードが9になり、TotalVariancesに3が追加され、レコードが更新されます3.

であることはこれまでのところ、私は、このようになります更新クエリを使用して、カウント合計アイテムと分散の合計数の両方のために作る表クエリを使用して試してみた:

UPDATE tblMonthlyData 
SET TotalItems = TotalItems + tblTempTotalItems.CountOfItems, 
TotalVariances = TotalVariances + tblTempTotalVariances.CountOfVariances 
WHERE Format$([ReportMonth],"mmm")=Format$(Now(),"mmm"); 

私はしました同様の方法でselectクエリを使用してレコードと分散をカウントし(一時テーブルを作成せずに)、それらに基づいて更新クエリを実行しました。指定されたテンポラリテーブルまたは選択クエリから値を取得するのではなく、更新クエリが実行されたときに、両方の方法でCountOfItemsおよびCountOfVariancesパラメータのアクセスプロンプトが表示されます。

これは単純な操作(レコードと分散のカウントをクエリし、別のテーブルの適切な月次レコードに追加する)のように思えますが、それはどのように作成するのか分かりません作業。助けてくれてありがとう!

+0

データベースを正規化すると、項目や分散の計算が容易になります。このコメントの最初の3つの言葉を理解していない場合は、「Mere Mortalsのためのデータベース設計」という本についてよく聞きました。 –

+0

データベースの正規化とその形式について読んだことがあります。私は間違いなく私の小さなプロジェクトを作るときに私の最初のパスで設定されたものを正常化させるのに苦労します。 – UnseenSpecter

答えて

0

これはテーブルの状況ではないようですが、常に最新の状態になるビュー/クエリがあります。

あなたはmontlhy数にそれを追加したい場合は、我々は別のクエリであることを行います(毎日アイテム数のためのクエリでGROUP BY FORMAT([date_field],"mm/dd/yyyy")句を使用してください。

SELECT FORMAT([date_field],"mm/dd/yyyy") AS Date, COUNT(ID) AS TotalItems 
FROM tblDailyData 
GROUP BY Date 

コールこのクエリdailyTotalItems。

SELECT FORMAT([date_field],"mm/dd/yyyy") AS Date, COUNT(ID) AS TotalItemsWithVariance, SUM(
FROM tblDailyData 
WHERE NOT (Variance = 0) 
GROUP BY Date 

コールこのクエリdailyTotalItemsWithVariance。

SELECT MONTH([date_field]) As MonthDate, SUM(TotalItems) As TotalMonthlyItems 
FROM dailyTotalItems 
GROUP BY MonthDate 

monthlyTotalItemsという名前のクエリを呼び出します。

SELECT MONTH([date_field]) As MonthDate, SUM(TotalItemsWithVariance) As TotalMonthlyItemsWithVariance 
FROM dailyTotalItemsWithVariance 
GROUP BY MonthDate 

このクエリをmonthlyTotalItemsWithVarianceといいます。

次に、LEFT JOIN月曜日。

SELECT * FROM monthlyTotalItems 
LEFT JOIN monthlyTotalItemsWithVariance ON monthlyTotalItems.MonthDate = monthlyTotalItemsWithVariance.MonthDate 

注:TotalItemsは常に>= TotalItemsWithVarianceされ、分散して、すべての日付は、カウントを持っている必要があります。したがって、monthlyTotalItems内のすべての日付を取得し、monthlyTotalItemsWithVarianceの項目に一致するように左寄せします(上記のように含める必要があります)。

+1

正直なところ、テーブル作りのステップは、私が研究によって見つけた解決策でしたが、何の理由もありませんでした。私が正しく仮定したことを知ってうれしい。私は本当にあなたのクエリで何をすべきかはわかりません。 'tblDailyData'の日付でレコードを照会するようです。私は現在、tblDailyData'に日付フィールドを持っていません。それは、カウントする必要がある項目情報だけを持つテーブルです。 – UnseenSpecter

+1

追加した詳細を読み終えました。あなたが「このテーブルを呼び出す」と言うと、あなたはクエリを意味しましたか?したがって、毎日の商品合計、1日の商品差異、1か月間の商品合計、および月間の商品差異を照会しますか? – UnseenSpecter

+0

は、あなたのテーブルに日付フィールドを是非含めてください!すべてを一緒に繋げる。より洗練された、より洗練された、信頼できるデータを生成するIMO。 –

関連する問題