3

SSRS レポート内で週ごとの成長を測定して表示しようとしています。

SSRS で過度に複雑な数式やマトリックスを追加することなく、SQL で必要なデータを簡単に取得するために、SQL 内でピボット関数とパラメーターを組み合わせて使用​​しようとしています。

私が試した式は次のとおりです。

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だと思います。2 番目の列名は [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 に答える