开发者社区> 问答> 正文

SQL查询按月比较产品销售

我有一个“月度状态”数据库视图,我需要根据该视图生成报告。视图中的数据如下所示:

Category | Revenue | Yearh | Month Bikes 10 000 2008 1 Bikes 12 000 2008 2 Bikes 12 000 2008 3 Bikes 15 000 2008 1 Bikes 11 000 2007 2 Bikes 11 500 2007 3 Bikes 15 400 2007 4

...等等

该视图具有产品类别,收入,一年零一个月。我想创建一个比较2007年和2008年的报告,在没有销售的月份中显示0。因此,报告应如下所示:

Category | Month | Rev. This Year | Rev. Last Year Bikes 1 10 000 0 Bikes 2 12 000 11 000 Bikes 3 12 000 11 500 Bikes 4 0 15 400

要注意的关键是,第1个月在2008年仅有销售,因此2007年为0。此外,第4个月在2008年没有销售,因此,第0个月在2007年有销售并且仍然显示。

此外,该报告实际上是针对财务年度的-因此,如果2007年或2008年的第5个月没有销售,那么我希望两列都为0。

我得到的查询看起来像这样:

SELECT SP1.Program, SP1.Year, SP1.Month, SP1.TotalRevenue, IsNull(SP2.TotalRevenue, 0) AS LastYearTotalRevenue

FROM PVMonthlyStatusReport AS SP1 LEFT OUTER JOIN PVMonthlyStatusReport AS SP2 ON SP1.Program = SP2.Program AND SP2.Year = SP1.Year - 1 AND SP1.Month = SP2.Month WHERE SP1.Program = 'Bikes' AND SP1.Category = @Category AND (SP1.Year >= @FinancialYear AND SP1.Year <= @FinancialYear + 1) AND ((SP1.Year = @FinancialYear AND SP1.Month > 6) OR (SP1.Year = @FinancialYear + 1 AND SP1.Month <= 6))

ORDER BY SP1.Year, SP1.Month 此查询的问题在于,由于我们在2008年没有任何销售,但实际上在2007年有销售,因此它不会返回上述示例数据中的第四行。

这可能是一个常见的查询/问题,但是经过很长时间的前端开发后,我的SQL还是很生锈。任何帮助是极大的赞赏!

哦,顺便说一句,我正在使用SQL 2005进行此查询,因此,如果有任何有用的新功能可能会让我知道。

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-15 17:36:58 371 0
1 条回答
写回答
取消 提交回答
  • 关于降价-是的,令人沮丧。编辑器确实预览了我的HTML表格,但发布后消失了-因此必须从帖子中删除所有HTML格式...

    @kcrumley我认为我们已经得出类似的结论。这个查询很容易变得丑陋。在阅读您的答案之前,我实际上使用类似(但又不同的方法)解决了这一问题。我有权在报表数据库上创建存储过程和函数。我创建了一个表值函数,该函数接受一个产品类别和一个财务年度作为参数。基于此,该函数将填充一个包含12行的表。如果有任何可用的销售,将用视图中的数据填充行,否则,行将具有0值。

    然后,我将函数返回的两个表连接在一起。由于我知道所有表都有十二个粗纱,因此分配起来比较容易,我可以加入“产品类别和月份”:

    SELECT SP1.Program, SP1.Year, SP1.Month, SP1.TotalRevenue AS ThisYearRevenue, SP2.TotalRevenue AS LastYearRevenue FROM GetFinancialYear(@Category, 'First Look', 2008) AS SP1 RIGHT JOIN GetFinancialYear(@Category, 'First Look', 2007) AS SP2 ON SP1.Program = SP2.Program AND SP1.Month = SP2.Month 我认为您的方法可能更简洁一些,因为GetFinancialYear函数非常混乱!但是至少它能起作用-这让我暂时感到高兴;)

    2019-11-15 17:37:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载
AnalyticDB基础版:云原生My SQL 敏捷数仓 立即下载