访问SQL查询 - 总计算的百分比

时间:2017-03-09 01:15:58

标签: sql ms-access aggregation percentage iif

在Access SQL中,我正在尝试获得总数百分比的简单任务。有3个商品商店(西尔斯,凯马特和Mktpl),在任何给定的一周内,我希望根据销售额计算各自的百分比(所有可以使用一个表格获得 - tbl_BUChannelReporting)。

例如第5周的虚拟数字 - Sears 7000,kmart 2500,mktpl 2000 将返回以下比率:西尔斯61%,凯马特22%,mktpl 17%

我原本试图创建一个子查询,并没有得到任何地方,所以我基本上试图在第5周将其中一个商品商店的销售额除以第5周所有3个商品商店销售额的总和。以下是我的查询,它给了我“表达式中不能有聚合函数”错误:

SELECT FY, FW, Rept_Chnl, BU_NM, Order_Store, Item_Store, CDBL(

SUM(IIF([item_store]="sears", revenue, IIF([item_store]="kmart", revenue, IIF([item_store]="mktpl", revenue,0)))) /

(SUM(IIF([item_store]="sears",revenue,0)+SUM(IIF([item_store]="kmart",revenue,0)+SUM(IIF([item_store]="mktpl",revenue,0)))))) 

 AS Ratios
FROM tbl_BUChannelReporting
WHERE FY = "2017"
AND FW = 5
GROUP BY FY, FW, Rept_Chnl, BU_NM, Order_Store, item_store

先谢谢大家抽出时间。这是我在这里的第一篇文章,我不认为自己只是一个新手急于从最好的学习中学习,看看结果如何。

小心!

-D

1 个答案:

答案 0 :(得分:0)

考虑使用两个派生表或已保存的聚合查询:一个在 Item_Store 上分组,另一个不包含 Item_Store ,以便对总商店进行求和'收入。所有其他分组( FY FW Rept_Chnl BU_NM Order_Store )仍然存在两者兼而有之。然后在外部查询中,计算百分比。

SELECT i.*, CDbl(i.Store_Revenue / a.Store_Revenue) As Ratios
FROM
  (SELECT t.FY, t.FW, t.Rept_Chnl, t.BU_NM, t.Order_Store, t.Item_Store, 
          SUM(t.Revenue) As Store_Revenue
   FROM tbl_BUChannelReporting t
   WHERE t.FY = '2017' AND t.FW = 5 
   GROUP BY t.FY, t.FW, t.Rept_Chnl, t.BU_NM, t.Order_Store, t.Item_Store) As i
INNER JOIN 
  (SELECT t.FY, t.FW, t.Rept_Chnl, t.BU_NM, t.Order_Store 
          SUM(t.Revenue) As Store_Revenue
   FROM tbl_BUChannelReporting t
   WHERE t.FY = '2017' AND t.FW = 5 
   GROUP BY t.FY, t.FW, t.Rept_Chnl, t.BU_NM, t.Order_Store) As a
ON i.FY = a.FY AND i.FW = a.FW AND i.Rept_Chnl = a.Rept_Chnl 
AND i.BU_NM = a.BU_NM AND i.Order_Store = a.Order_Store

或者将每个SELECT以上的语句保存为自己的查询,并在下面引用:

SELECT i.*, (i.Store_Revenue / a.Store_Revenue) As Ratios
FROM
  Indiv_Item_StoreAggQ As i
INNER JOIN 
  All_Item_StoreAggQ  As a
ON i.FY = a.FY AND i.FW = a.FW AND i.Rept_Chnl = a.Rept_Chnl 
AND i.BU_NM = a.BU_NM AND i.Order_Store = a.Order_Store