我正在尝试在SSRS报告中衡量并显示一周一周的增长。
我试图在SQL和参数中结合使用pivot函数,以便在SQL中轻松检索我需要的数据,而无需在SSRS中添加过于复杂的公式和矩阵。
我尝试的公式是:
SELECT category, COALESCE (sum([@wedate]), 0) AS currentweek, COALESCE (sum([@wedate-7]), 0) AS previousweek
FROM OfficeProduction
PIVOT (sum(amount) FOR wedate IN ([@wedate], [@wedate-7])) AS p
WHERE category = 'Revenue'
GROUP BY category
当我尝试将其保存为存储过程时,我会收到错误,以及当我将其直接插入SSRS中的数据集框时。
我已经测试了参数的插入值
SELECT category, COALESCE (sum([7/7/12]), 0) AS currentweek, COALESCE (sum([6/30/12]), 0) AS previousweek
FROM OfficeProduction
PIVOT (sum(amount) FOR wedate IN ([7/7/12], [6/30/12])) AS p
WHERE category = 'Revenue'
GROUP BY category
我得到了合适的结果......所以我感觉很接近,任何帮助都会受到赞赏。
答案 0 :(得分:1)
听起来您需要动态SQL传递参数并使用参数值执行最终语句。这是一个应该有效的简短快速脚本:
create table t
(
id int,
wedate datetime,
amount int
)
insert into t values (1, '2012-07-07', 50)
insert into t values (2, '2012-06-30', 25)
insert into t values (3, '2012-07-07', 75)
insert into t values (4, '2012-06-30', 25)
DECLARE @wedate datetime
DECLARE @wedateP datetime
declare @sql varchar(max)
DECLARE @wedateCol varchar(10)
DECLARE @wedatePCol varchar(10)
set @wedate = '2012-07-07'
set @wedateP = DateAdd(d, -7, @wedate)
set @wedateCol = Convert(char(10), @wedate, 101)
set @wedatePCol = Convert(char(10), @wedateP, 101)
set @sql = 'select * FROM t
PIVOT
(
sum(amount)
for wedate in ([' + @wedateCol + '], [' + @wedatePCol +' ])
)p '
exec(@sql)
drop table t
它在单独的参数中创建前一周的值,然后将它们转换为PIVOT的文本值。
答案 1 :(得分:0)
我认为问题是@ wedate-7。第二列名称是[7/7 / 12-7]。
计算@wedate_prev并在查询中使用它。
计算结果如下:
select convert(varchar(255), dateadd(d, -7, @wedate), 101)
或者,更好的是:
select cast(month(dateadd(d, -7, @wedate)) as varchar(2))+'/' +
cast(day(dateadd(d, -7, @wedate)) as varchar(2))+'/'+
cast(year(dateadd(d, -7, @wedate))%100 as varchar(2))