我有一个挑战,我似乎无法自己解决,现在需要帮助!
我要求通过SQL显示并行年份销售额,我的意思是,如果今天(2015年8月20日)客户A购买了价值500的产品,我想知道客户A在同一天花了多少钱去年(所以2014年8月20日)。
这是一个SQL fiddle我已经建立了所有东西(我估计这对你们来说最容易)。我有3个维度(DimProduct,DimDate和DimCustomer),一个事实表(FactSales)和一个我在顶部构建的视图(VW_ParallelSales)。我还在右手边留下了我正在努力实现的目标。如果您运行查询,您将看到对于Antonio,20140820上的SaleAmount是3500,如果您查看表格的最底部,您可以看到在20150820的6500事实表中还有一个安东尼奥的记录。所以从根本上说,我想要的是在ParallelSales列(目前显示为NULL)下在20140820(这是20150820的平行年份日期)上出售的3500。
如果我在视图中不包含ProductKey并且只有CustomerKey(see this fiddle),那么它就像一个魅力。但是,只要我添加产品密钥,因为过去发生的CustomerKey-ProductKey没有完全匹配,我就得到了ParallelSales的NULLS(或者至少我认为原因是这样)。
然后我想要做的是使用视图并连接DimCustomer和DimProduct并以两种方式运行查询,即:
问题1:今天客户A与去年相比花了多少钱? 问题2:我们今天销售的产品A与去年相比有多少?
目前,我需要有2个视图 - 一个连接CustomerKey视图中的两个子查询,另一个连接在ProductKey上(显然是日期)。
我知道要问很多,但我确实需要这个工作,非常感谢你的帮助!谢谢:))
答案 0 :(得分:2)
对于不同年份的客户销售。
for (const auto& e : myarray)
对于productkey
SELECT DimCustomer.CustomerName,
VW_Current.Saledate,
VW_Current.ParallelDate,
VW_Current.CurrentSales,
VW_Previous.CurrentSales as ParallelSale
FROM DimCustomer
INNER JOIN VW_ParallelSales VW_Current
ON DimCustomer.CustomerKey = VW_Current.CustomerKey
LEFT JOIN VW_ParallelSales VW_Previous
ON VW_Current.ParallelDate = VW_Previous.Saledate
AND DimCustomer.CustomerKey = VW_Previous.CustomerKey
ORDER BY 1, 2