【问题标题】:SELECT previous year data based on year column根据年份列选择上一年数据
【发布时间】:2017-03-29 23:23:34
【问题描述】:

我正在尝试开发 SSRS 报告。我从事务表中获取了销售价值,并按年、月和子类别对它们进行了分组。我已将其创建为视图。查看代码如下:

SELECT b.FiscalYear AS Year, 
       b.FiscalMonth AS Month, 
       a.SubCategoryKey, 
       MAX(a.SubCategoryDesc) AS SubCategoryDesc, 
       SUM(CAST(a.Cost + a.FreightCost AS decimal(18, 2))) AS TotalCost, 
       SUM(CAST(a.SalesAmount AS decimal(18, 2))) AS   TotalSales,       
SUM(CAST(a.Weight AS decimal(18, 2))) AS Pounds, SUM(CAST(a.SalesAmount -(a.Cost + a.FreightCost) AS decimal(18, 2))) AS Margin
FROM dbo.GrossMargin_CorrectedCosts AS a 
LEFT OUTER JOIN dbo.M_DateDim AS b ON a.InvoiceDate = b.Date
GROUP BY b.FiscalYear, b.FiscalMonth, a.SubCategoryKey

然后我得到一个干净的视图,如下所示:

SELECT [Year]
  ,[Month]
  ,[SubCategoryKey]
  ,[SubCategoryDesc]
  ,[TotalCost]
  ,[TotalSales]
  ,[Pounds]
  ,[Margin] 
  FROM [FinancialData].[dbo].[SubCategorySalesbyMonth_V]\

我现在想在这个查询中添加额外的列。我将把它作为 SSRS 报告运行,并传递 Year 和 Month 参数。我想做的是,当2017年被选为已通过的年份参数时,我想向Totalsales,Totalcost和Fings显示前一年的值。

而查询看起来像这样:

SELECT [Year]
  ,[Month]
  ,[SubCategoryKey]
  ,[SubCategoryDesc]
  ,[TotalCost]
  ,[TotalSales]
  ,[Pounds]
  ,[Margin]
  ,PreviousYearTotalSales
  ,PreviousYearTotalCost
  ,PreviousYearPounds 
  FROM [FinancialData].[dbo].[SubCategorySalesbyMonth_V] 

基本上,当将年份和月份传递给报告时,我想显示该给定期间减去一年的前几年的总销售额、总成本和磅数。我有时间做这件事。

我觉得我什么都试过了,但显然没有。请帮忙。

【问题讨论】:

    标签: select reporting-services sql-server-2012


    【解决方案1】:

    现在您可以使用的视图是以下查询。

    SELECT CY.[Year]
    ,CY.[Month]
    ,CY.[SubCategoryKey]
    ,CY.[SubCategoryDesc]
    ,CY.[TotalCost]
    ,CY.[TotalSales]
    ,CY.[Pounds]
    ,CY.[Margin] 
    ,PY.[TotalSales] AS PreviousYearTotalSales
    ,PY.[TotalCost] AS PreviousYearTotalCost
    ,PY.[Pounds] AS PreviousYearPounds 
    FROM [FinancialData].[dbo].[SubCategorySalesbyMonth_V] CY LEFT JOIN [FinancialData].[dbo].[SubCategorySalesbyMonth_V] PY
    ON CY.[Year] - 1 = PY.[Year]
    AND CY.[Month] = PY.[Month]
    AND CY.[SubCategoryKey] = PY.[SubCategoryKey]
    AND CY.[Month] = PY.[Month]
    

    这只是一个简单的自我左连接到同一个视图,但是从当前年份 (CY) 开始的年份正在加入到上一年 (PY) 的年份 - 1。它是 LEFT JOIN,所以如果没有任何前一年/月的数据可用,前一年的值将为空。

    希望这会有所帮助。

    【讨论】:

    • 非常感谢@R。理查兹。这是一个非常简单且有价值的提示。它非常适合这种情况。再次非常感谢您。
    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2018-01-23
    相关资源
    最近更新 更多