【发布时间】:2011-08-03 10:17:25
【问题描述】:
我想玩弄我的 Total_Sales 表。 这就是数据的样子(使用 SQL Server 2008 R2)
Name Year Month Sales
------ ---- ----- -----
Alfred 2011 1 100
Alfred 2011 2 200
Alfred 2011 3 300
Alfred 2011 4 400
Alfred 2011 5 500
Alfred 2011 6 600
Alfred 2011 7 700
Alfred 2011 8 800
Alfred 2011 9 900
Alfred 2011 10 500
Alfred 2011 11 500
Alfred 2011 12 500
我要创建的 SQL 查询应该像这样显示数据:
Name Year Month Sales Prev_Month Month_Last_Year_Sales Last_12_Month_AVG
------ ---- ----- ----- ---------- --------------------- -----------------
Alfred 2011 1 100 NULL (year 2010, month 1) (2010_01 to 2011_01)/(12)
Alfred 2011 2 200 100 (year 2010, month 2) (2010_02 to 2011_02)/(12)
Alfred 2011 3 300 200 (year 2010, month 3) (2010_03 to 2011_03)/(12)
Alfred 2011 4 400 300 (year 2010, month 4) (2010_04 to 2011_04)/(12)
Alfred 2011 5 500 400 (year 2010, month 5) (2010_05 to 2011_05)/(12)
Alfred 2011 6 600 500 (year 2010, month 6) (2010_06 to 2011_06)/(12)
Alfred 2011 7 700 600 (year 2010, month 7) (2010_07 to 2011_07)/(12)
Alfred 2011 8 800 700 (year 2010, month 8) (2010_08 to 2011_08)/(12)
Alfred 2011 9 900 800 (year 2010, month 9) (2010_09 to 2011_09)/(12)
Alfred 2011 10 500 900 (year 2010, month 10) (2010_10 to 2011_10)/(12)
Alfred 2011 11 500 500 (year 2010, month 11) (2010_11 to 2011_11)/(12)
Alfred 2011 12 500 500 (year 2010, month 12) (2010_12 to 2011_12)/(12)
要复制上个月我正在使用这个:Copy prior month value and insert into new row
SELECT
TS.name,
TS.year,
TS.month,
TS.sales,
COALESCE(TS2.sales, 0) AS prior_month_sales
FROM
TotalSales TS
LEFT OUTER JOIN TotalSales TS2 ON
TS2.name = TS.name AND
(
(TS2.year = TS.year AND TS2.month = TS.month - 1) OR
(TS.month = 1 AND TS2.month = 12 AND TS2.year = TS.year - 1)
)
Prev_Month 中的 NULL 表示 Total_Sales 的开始时间是 2011 年的第 1 个月,因此此示例没有先前的数据。
我打算使用一个参数,您可以在其中选择一个月。
感谢您的帮助!
【问题讨论】:
-
您可以在 Reporting Services 而不是 SQL 中进行聚合。获取年份数据并使用报表功能
-
我就是这么想的,但是为一个数据集创建查询不是更容易吗?我遇到的问题是 Last_12_Month_AVG。
-
我通过报告服务完全做到了
-
AVG 代码如下: =(RunningValue(Clng(Iif(Fields!fiscalyear.Value=2011 ,Fields!valuesale.Value,0)),SUM,"table1") + SUM(Clng (Iif(Fields!fiscalyear.Value=2010,Fields!valuesale.Value,0)),"table1") - RunningValue(Clng(Iif(Fields!fiscalyear.Value=2010 ,Fields!valuesale.Value,0)), SUM,"table1"))/12
标签: sql reporting-services parameters subquery