2017-12-27 60 views
-3

の計算に関する質問があります。だから、私はExcelテーブルをアップロードしました。ここで計算しました。私は加重平均値に興味があります、基本的にどのように計算を行うには、アクセスに優れていました。製品あたりの加重平均を計算

私の数式は次のようになりました。=SUMIFS($I:$I;$G:$G;G2;$H:$H;H2;$B:$B;B2;$C:$C;C2)/SUMIFS($F:$F;$G:$G;G2;$H:$H;H2;$B:$B;B2;$C:$C;C2) 毎月、各グループごとに、各コード(製品)の適切な販売と販売数量を得ています。

私は同じデータベースをExcelに持っています。Excelのように、収益、月、および年の値を持つ計算フィールドをすべて追加しました。しかし、私はアクセスの私のエクセル式を再現する方法を考えなければならない。

画像上の1製品あたりの重み付けには、上記の式が含まれています。私は、データが同じであるこの計算をアクセスに含める方法を見つける必要があります。

Code Group  Price per t Volume MONTH YEAR Revenue   Weighted 
13753 avangard 12 818,84 108,85 1  2008 1 395 330,73 13 826,51 
13755 super  11 488,83 26,76 1  2008 307 441,09  15 726,96 
14899 super  11 607,86 64,39 1  2008 747 430,11  15 591,86 
13747 super  11 892,57 62,96 1  2008 748 756,21  16 199,30 
13753 avangard 18 134,69 94,65 1  2008 1 716 448,41 13 826,51 

それは計算する必要がありますどのように= SUMIFS(収益; CriteriaRange(1)=月、クライテリア(1)=行2(月); CriteriaRange(2)=年;基準(2)=行2(年) ; CriteriaRange(1)= Month; Criteria(1)= Row2(Month); CriteriaRange(2)= Year; Criteria(3)= CriteriaRange(2)

テーブルサンプルで計算された重み付けとは別の場合、提供されたデータのみに基づいて、アイテムの重み付けされた価格(たとえば、 13753 =(1 395 330,73 + 1 716 448,41)/(108,85 + 94,65)= 15 291,30

@Darren Bartrアップクック。私が必要とする解決策を見つけました。ご協力いただきありがとうございます。これは、SUMIFS関数をミラーリングするために使用した最後のSQLコードです。あなたの例の表のように設定テーブル(申し訳ありませんが、写真を見ることができない)と 表名で

SELECT Data.Code, 
      Справочник_групп_продукции.Group, 
      Month([Dated]) AS LMonth, 
      Year([Dated]) AS LYear, 
      SUM([Price per t] * [Volume])/SUM([Volume]) AS Wght_Avg 
FROM Справочник_групп_продукции INNER JOIN Data ON Справочник_групп_продукции.[Code] = Data.[Code] 
GROUP BY Data.Code, 
        Month([Dated]), 
        Year([Dated]), 
        Справочник_групп_продукции.Group; 

https://imgur.com/DyMYnEC

+1

あなたがアクセスでタグ付けし、それが聞こえますあなたはクエリの助けが必要なのです。そうであれば、予想される出力と共に、入力データのサンプルを表形式で表示する必要があります。 –

+0

私は、アクセスとエクセルの両方のデータを持つファイルを添付して、最も右の列(重み付けされた)のエクセルテーブルに予想される結果を得ました。アクセスの公式やクエリを使って、どうすればいいのか分かりません。私はアクセスの騒ぎです。 – Andrey

+0

できるだけファイルを共有しないように注意してください。特に、遅れて広告を表示する日陰のファイル共有サービスを使用することをお勧めします。 [Microsoft Accessのテーブルを共有する方法](https://meta.stackoverflow.com/questions/359195/share-a-table-on-stack-overflow-for-easy-import-into-ms-access)を参照してください。 )。これはプロと熱心なプログラマーのためのサイトで、あなたが投稿している主題についてのプログラミング知識が必要です。 –

答えて

1

あなただけの合計を実行する必要がMyTableとして(収入/ボリューム)、コード、月、および年ごとにグループ化します。

SELECT  Code 
      , Group 
      , lMonth 
      , lYear 
      , ROUND(SUM(Revenue)/SUM(Volume),2) AS Weighted_Avg 
FROM  MyTable 
GROUP BY Code 
      , Group 
      , lMonth 
      , lYear 

NB:私は予約語の競合を避けるためにlMonthlYearMonthYearフィールドの名前を更新しました。
おそらく月と年の数字ではなく、実際の日付を使用するように私のデザインを変更するでしょう。

NB 2:私はまた、メインテーブルにそのテーブルの主キー外部キーとしてCodeを使用して別のテーブルにGroupを移動すると思います。これにより、グループ名のスペルがなくなります。
新しいクエリは次のようになります。

SELECT  MyTable.Code 
      , Group 
      , lMonth 
      , lYear 
      , ROUND(SUM(Revenue)/SUM(Volume),2) AS Weighted_Avg 
FROM  MyTable LEFT JOIN GroupTable ON MyTable.Code = GroupTable.Code 
GROUP BY MyTable.Code 
      , Group 
      , lMonth 
      , lYear 

編集:あなたは、この更新されたSQLが動作するはずです投稿したSQLを見てみると

SELECT  Format(Dated,"mmm-yyyy") AS Month_Year 
      , Group 
      , Data.Code 
      , [Price per t]*volume AS Revenue 
      , ROUND(SUM([Price per t]*[Volume])/SUM(Volume),2) AS Weighted_Avg 
FROM  Справочник_групп_продукции INNER JOIN Data ON Справочник_групп_продукции.Code = Data.Code 
GROUP BY Format(Dated,"mmm-yyyy") 
      , Group 
      , Data.Code 
      , [Price per t]*volume 
+0

あなたの答えをありがとう。あなたはplsにいくつかの説明を提供することができます。日付に基づいて月/年の計算を処理する方法(私のテーブルの "日付"と呼ばれるフィールド)は何ですか?私は日付があります。また、私は他のテーブルからグループを検索するためにクエリを使用するので、私はあなたのコードを私のクエリに適応させることができます。私は次のコードを持っていますが、それは私にエラーを返します。メインポストをコードで更新しました。 – Andrey

+0

あなたのエラーは加重平均から来ていると思います。あなたの収入は '[Price per t] * [Volume] AS Revenue'として計算され、加重平均計算ではこれを「収入」と呼ぶことはできません。 'ROUND(SUM([Price per t] * [Volume])/ SUM(Volume)、2)AS Weighted_Avg'を使用してください。あなたの日付は 'Format(dDate、" mmm-yyyy ")AS Month_Year'で表示することができます。これもグループ化する必要があります。 'WHERE dDate BETWEEN#2008/01/01#AND#2008/02/01#-1'を使って2008年1月に制限することができます –

+0

また、あなたのクエリに' Price per t'または 'volume'を表示することはできませんそれが変わると、グループ化されないコード13753の場合は12 818,84と18 134,69になります。また、SQLでは、FROM句の最後にセミコロン( ';')があります。使用すると、クエリの最後に移動する必要があります。 –