3

我正在尝试在 SSRS 报告中衡量和显示每周的增长。

我正在尝试结合使用 SQL 中的数据透视函数和参数来轻松检索我在 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

我得到了适当的结果......所以我感觉很接近,任何帮助将不胜感激。

4

2 回答 2

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 的文本值。

于 2012-07-25T14:57:03.343 回答
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))
于 2012-07-25T14:57:53.143 回答