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

Access SQL query - Percentage of Total calculation

在 Access SQL 中,我正在尝试获得占总数百分比的看似简单的任务。有 3 家商品商店(Sears、kmart 和 Mktpl),在任何给定的一周内,我希望根据销售额余额计算它们各自占总数的百分比(所有这些都可以使用一个 table - tbl_BUChannelReporting).

例如第 5 周的虚拟号码 - Sears 7000、kmart 2500、mktpl 2000 将返回以下比率:sears 61%、kmart 22%、mktpl 17%

我最初试图创建一个子查询,但没有取得任何进展,所以我实际上是在尝试将第 5 周的其中一家商品商店的销售额除以第 5 周所有 3 家商品商店的销售额总和. 以下是我的查询,它给我 "cannot have aggregate function in expression" 错误:

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

提前感谢大家抽出宝贵时间。这是我第一次 post 来这里,我认为自己只是一个新手,渴望向最好的人学习,看看结果如何。

保重!

-D

考虑使用两个派生表或保存的聚合查询:一个基于 Item_Store 分组,另一个不包括 Item_Store 来求和商店的总收入。所有其他分组(FYFWRept_ChnlBU_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