为魔兽增长提供SQL中的日期参数

时间:2012-07-25 14:40:47

标签: sql reporting-services parameters pivot

我正在尝试在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

我得到了合适的结果......所以我感觉很接近,任何帮助都会受到赞赏。

2 个答案:

答案 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))