并行日期销售SQL视图

时间:2015-08-20 18:32:51

标签: sql sql-server sql-server-2008 sql-server-2012 sql-server-2014

我有一个挑战,我似乎无法自己解决,现在需要帮助!

我要求通过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上(显然是日期)。

我知道要问很多,但我确实需要这个工作,非常感谢你的帮助!谢谢:))

1 个答案:

答案 0 :(得分:2)

对于不同年份的客户销售。

SQL Fiddle Demo

for (const auto& e : myarray)

对于productkey

SQL Fiddle Demo

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