2017-03-29 114 views
0

我正在尝试开发SSRS报告。我已从交易表中获取销售价值,并按年份,月份和子类别对其进行分组。我已经创建了这个视图。下面是视图代码:SELECT year year data based on year column

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报告运行并传递年份和月份参数。我想要做的是当选择2017年作为传递年份参数时,然后我想显示TotalSales,TotalCost和Pounds的前一年值。

尽管查询会是这个样子:

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

本质上讲,当一个年份和月份被传递到报表,我想表现出往年totalsales,TOTALCOST和英镑,鉴于期减去一年。我有这么一段时间。

我觉得我已经尝试了一切,但显然不是。请帮忙。

回答

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,所以如果没有以前的年/月数据可用,则前一年的数值将为空。

希望这会有所帮助。

+0

非常感谢你@R。理查兹。这是一个非常简单和有价值的提示。它适用于这种情况。非常感谢你。 –