2017-12-27 462 views
-3

我有一个与计算有关的问题。所以要清楚,我上传了Excel表,在那里我做了计算。我对加权平均值感兴趣,基本上如何做我在excel中访问的计算。计算每个产品的加权平均值

我在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中。然而,我不得不知道如何重现我的Excel访问公式。

图片上加权的每件商品包含上述公式。我需要找到一种方法将这种计算包括在访问中,其中数据是相同的。

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(3)=代码;标准(3)=行2(编号))/ SUMIFS(音量; CriteriaRange(1)=月;标准(1)=行2(月); CriteriaRange(2)=年份;条件(2 )= Row2(Year); CriteriaRange(3)= Code; Criteria(3)= Row2(Code))

如果我们将自己与表格样本中的计算加权分开,仅基于所提供的数据, 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

您标记有Access和它的声音就像你需要查询帮助一样。如果是这样,那么你需要以表格形式显示样本输入数据以及预期输出。 –

+0

我附加了access和excel中的数据以及excel表中最右栏(加权)的预期结果。我不知道应该怎么做,通过访问公式或查询。我是访问中的小菜鸟。 – Andrey

+0

请注意,您应尽可能避免共享文件,特别是使用可延迟并显示广告的黑幕文件共享服务。请参阅[如何在MS上共享SO的表格](https://meta.stackoverflow.com/questions/359195/share-a-table-on-stack-overflow-for-easy-import-into-ms-access )。这是一个专业和enthousiast程序员的网站,有关您发布的主题的一些编程知识预计。 –

回答

1

随着你的表设置为示例表(抱歉,不能看到图片)和 表名作为MyTable你只需要执行的总和(收入/音量)并按代码,月份和年份分组。

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

注:我已经更新了MonthYear字段的名称lMonthlYear避免保留字冲突。
我可能会改变我的设计使用真实日期,而不是月份和年份数字,但。

NB 2:我也想移动Group使用Code作为该表中的主键另一个表和外键在主表。这将消除组名中的任何拼写错误。
新的查询是:

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

谢谢你的回答。虽然你能否提供一些解释。根据日期处理月/年计算的方法是什么(字段在表中称为“过期”)?我有日期。你也可以解释我,我怎样才能使你的代码适应我的查询,因为我使用查询从其他表中查找组。我有以下代码,但是它返回了一个错误。我用代码更新了我的主帖。 – Andrey

+0

我认为你的错误来自加权平均值。您的收入按照[[每吨价格] * [交易量] AS收入]计算,您不能在加权平均计算中将其称为“收入”。使用'ROUND(SUM([每t价格] * [Volume])/ SUM(Volume),2)AS Weighted_Avg'。您的日期可以使用格式(dDate,“mmm-yyyy”)AS Month_Year'显示 - 您也需要将其分组。然后,您可以通过使用WHERE dDate BETWEEN#2008/01/01#AND#2008/02/01#-1 –

+0

限制到2008年1月您也无法在查询中显示“每吨价格”或“交易量”随着它的变化 - 代码13753的12 818,84和18 134,69不会组合在一起。同样在你的SQL中,你在FROM子句的最后有一个分号(';') - 如果你使用它,它应该在查询结尾。 –