MS Access SQL强制执行不存在的值

MS Access SQL强制执行不存在的值,sql,ms-access,null,aggregation,iif,Sql,Ms Access,Null,Aggregation,Iif,总而言之,我根据渠道/业务单位/订单\门店/商品\门店的销售余额,将每周数字营销收入分成占总收入的百分比,以创建比率 这个等式的困境在于,如果由于给定渠道/BU/Order\U Store/Item\U Store/周内不存在销售而缺少比率,我的支出查询将乘以零,这将低估支出。如果是这样的话,我需要通过BU销售余额强制将费用投入Sears Item_商店。可以说,我正处在将此解决方案转换为sql编码的十字路口: 创建比率 将支出乘以先前查询中的比率 另一个注意事项是,在第一个查询中,我添加了HA

总而言之,我根据渠道/业务单位/订单\门店/商品\门店的销售余额,将每周数字营销收入分成占总收入的百分比,以创建比率

这个等式的困境在于,如果由于给定渠道/BU/Order\U Store/Item\U Store/周内不存在销售而缺少比率,我的支出查询将乘以零,这将低估支出。如果是这样的话,我需要通过BU销售余额强制将费用投入Sears Item_商店。可以说,我正处在将此解决方案转换为sql编码的十字路口:

创建比率 将支出乘以先前查询中的比率 另一个注意事项是,在第一个查询中,我添加了HAVING SUMbuc.Revenue 0子句,因为我得到NUM&Div/0错误。 提前感谢您的时间和照顾


-D

查询无法创建不存在的数据。如果您需要显示渠道/BU/Order\U Store/Item\U Store/周的所有组合(即使没有数据),则需要渠道/BU/Order\U Store/Item\U Store/周的所有可能组合的数据集。如果这些元素(包括周)都有一个表,那么可以通过包含它们的查询来创建此数据集。这个查询不会有任何导致每个表的每条记录都与其他表的每条记录相关联的联接子句—笛卡尔乘积查询。注意,涉及的表越多,查询速度越慢。然后将此查询连接到sales data表


或者另一种方法是使用带有DSum功能的52个文本框。我使用这种方法构建了一个简单的报告,其中显示了12个月的汇总数据。我希望每个月都能显示,即使没有数据

请澄清:我需要通过BU销售平衡将费用强行投入西尔斯商品商店…请随意用数据说明。您好,帕菲,我的道歉我在描述我的问题时不清楚-我编辑了这篇文章,包括一幅显示两个例子的图片-一个是输入与输出总数匹配,另一个是存在问题,因为没有可用的支出与支出的比率。当然,任何乘以零的东西都是零。在这种情况下,我很难弄清楚如何正确分配支出,但它不能简单地消失,因为这对said BU来说是低估的成本。我理解你的问题。我只是不明白你的解决办法。是否有“销售余额”字段?有一个“比率”字段,即根据上面两个查询中的第一个创建的“销售余额”字段,但我觉得没有必要显示比率。如果解决方案需要这样做,那么这当然不是问题。
SELECT a.*, CDbl(a.Revenue / b.Revenue) AS Ratios

FROM 

(SELECT buc.FY, buc.FM, buc.FW, buc.Rept_Chnl, buc.BU_NM,
IIf(buc.Order_Store="SEARS","Desktop","Mobile") AS Platform, buc.Item_Store, SUM(buc.Revenue) AS Revenue 
FROM tbl_BUChannelReporting AS buc 
WHERE buc.order_Store in ("SEARS","MG:SRS")  
AND buc.Item_Store <> "MKTPL" 
GROUP BY buc.FY, buc.FM, buc.FW, buc.Rept_Chnl, buc.BU_NM, IIf(buc.Order_Store="SEARS","Desktop","Mobile"), buc.Item_Store 
HAVING SUM(buc.Revenue) <> 0)  AS a 

INNER JOIN 

(SELECT buc.FY, buc.FM, buc.FW, buc.Rept_Chnl, buc.BU_NM, IIf(buc.Order_Store="SEARS","Desktop","Mobile") AS Platform, SUM(buc.Revenue) AS Revenue 
FROM tbl_BUChannelReporting AS buc 
WHERE buc.order_Store in ("SEARS","MG:SRS")  AND buc.Item_Store <> "MKTPL" 
GROUP BY buc.FY, buc.FM, buc.FW, buc.Rept_Chnl, buc.BU_NM, IIf(buc.Order_Store="SEARS","Desktop","Mobile") 
HAVING SUM(buc.Revenue) <> 0)  AS b 

ON (a.FY = b.FY) 
AND (a.FM = b.FM) 
AND (a.FW = b.FW) 
AND (a.Rept_Chnl = b.Rept_Chnl) 
AND (a.BU_NM = b.BU_NM) 
AND (a.Platform = b.Platform);
SELECT b.FY, b.FM, b.FW, b.Omniture_Channel, b.BU_NM, b.Platform, b.item_store, cdbl(b.Ratios * a.Spend) AS Spend

FROM 

(SELECT s.FY, s.FM, s.FW, s.Omniture_Channel, s.BU_NM, s.Platform, sum(s.Spend) AS Spend 
FROM spend_kmart AS s 
GROUP BY s.FY, s.FM, s.FW, s.Omniture_Channel, s.BU_NM, s.Platform 
HAVING SUM(s.Spend) <> 0)  AS a 

INNER JOIN 

(SELECT val(i.FY) AS FY, i.FM, i.FW, i.Rept_Chnl AS Omniture_Channel, i.BU_NM, i.Platform, i.item_store, cdbl(i.Ratios) AS Ratios 
FROM qry_Item_Store_Ratios_KMT_Non_MKTPL AS i 
GROUP BY val(i.FY), i.FM, i.FW, i.Rept_Chnl, i.BU_NM, i.Platform, i.item_store, cdbl(i.Ratios))  AS b 

ON (a.FY = b.FY) 
AND (a.FM = b.FM) 
AND (a.FW = b.FW) 
AND (a.Omniture_Channel = b.Omniture_Channel) 
AND (a.BU_NM = b.BU_NM) 
AND (a.Platform = b.Platform);