我正在从多个来源汇总每日数据。原始查询如下:
SELECT
D.MonthDate
,S.StoreName
,ISNULL(SUM(P.ProductSales),0) Sales
,ISNULL(SUM(A.AccessorySales),0) Accessories
FROM StoreDirectory S
JOIN DateDimension D
ON DayDate >= '2014-01-01'
AND DayDate <= '2014-12-31'
LEFT JOIN ProductData P
ON P.StoreName = S.StoreName
AND P.ActivityDate = D.DayDate
LEFT JOIN AccessoryData A
ON A.StoreName = S.StoreName
AND A.ActivityDate = D.DayDate
GROUP BY
D.MonthDate
,S.StoreName
我们的想法是为一年中的每一天建立一个每个商店都有价值的表格。 (DateDimension表每天都有一行,其中包含其他方便的参考信息,例如MonthDate中月份的最后一天)然后,如果P和D中有活动信息,请将其连接到该行。然后,GROUP BY和SUM将这些数据汇总到月份。
这很有效。
我需要按因子缩放ProductSales,因此我构建了一个子查询,其中包含每个MonthDate的唯一行以及缩放因子。字面上只有两列,像这样(十二行,每个月结束日期一个):
MonthDate Factor
--------- ------
2014-01-31 1.2
2014-02-28 0.8
etc...
MonthDate是一个虚拟主键 - 每个MonthDate只有一行。
我添加了一行来将此子查询加入到上表中,在SELECT语句中包含了Factor,并将其添加到了分组列列表中:
SELECT
D.MonthDate
,S.StoreName
,F.Factor --Added this factor field
,ISNULL(SUM(P.ProductSales),0) Sales
,ISNULL(SUM(A.AccessorySales),0) Accessories
FROM StoreDirectory S
JOIN DateDimension D
ON DayDate >= '2014-01-01'
AND DayDate <= '2014-12-31'
--Updated to more closely resemble the actual sub-query
JOIN (
SELECT
FT.MonthDate
,SUM(FT.Factor)
FROM FactorTable FT
JOIN DateDimension D
ON FT.DailyContribution = D.DayDate
GROUP BY
MonthDate) F
ON F.MonthDate = D.MonthDate
LEFT JOIN ProductData P
ON P.StoreName = S.StoreName
AND P.ActivityDate = D.DayDate
LEFT JOIN AccessoryData A
ON A.StoreName = S.StoreName
AND A.ActivityDate = D.DayDate
GROUP BY
D.MonthDate
,S.StoreName
,F.Factor --Added Factor to the GROUP BY
我认为这只会将适当的因子作为列添加到现有的SUM中。它不是。它改为计算比原始查询大得多的SUM。
我需要因素(可选)调整另一个背景下的销售数字......
非常感谢你的帮助 - 让我知道我是否可以澄清任何事情!
答案 0 :(得分:0)
感谢帮助,伙计们!
发现了我的错误:
AccessoryData
表每个DayDate
有多行,这些行是从其余数据中复制的行。检查你的消息来源,伙计们!