0

現在、レポートの水平方向の合計を取得しようとしています。現在、動的クエリとピボット テーブルを使用しています。以下は私のコードです

宣言 @cols nvarchar(max) 宣言 @pvt_cols nvarchar(max) 宣言 @sqlquery nvarchar(max)

select @cols= Coalesce(@cols+',','')
    + 'Coalesce([' +MonthYR+ '],0) AS [' + MonthDescription +'] '
            ,@pvt_cols=coalesce(@pvt_cols +',','') +' ['+[MonthYR] +']' 
from @Calendar 
where CASDT between '20110401' and '20111230' (generates column with month headers)

print @cols     
print @pvt_cols
print '--------------------'


Set @sqlquery='Select ProdDesc,'+@cols + ',Total
            from (Select    ProdDesc, 
                    MonthYr, 
                    NetAmount,
                    SUM(NetAmount ) over (partition by ProdDesc) as Total 
            from #Comtempt1
             ) as dat 
                    pivot(
            SUM(NetAmount) for MonthYr in 
            (' + @pvt_cols + '))pvt'

print @sqlquery

exec sp_executesql @sqlquery

合計を取得できますが、レコード全体の合計が表示されますが、ユーザーが入力した日付に応じて合計を取得するだけで済みます。

4

1 に答える 1

0
declare @cols nvarchar(max) declare @pvt_cols nvarchar(max) declare @sqlquery nvarchar(max)
declare @total nvarchar(max)
select @cols= Coalesce(@cols+',','')
    + 'Coalesce([' +MonthYR+ '],0) AS [' + MonthDescription +'] '
            ,@pvt_cols=coalesce(@pvt_cols +',','') +' ['+[MonthYR] +']' 
            ,@total= Coalesce(@total+'+','') + 'Coalesce([' +MonthYR+ '],0)'
from @Calendar 
where CASDT between '20110401' and '20111230' (generates column with month headers)

print @cols     
print @pvt_cols
print '--------------------'


Set @sqlquery='Select ProdDesc,'+@cols + ',' + @Total + ' Total
            from (Select    ProdDesc, 
                    MonthYr, 
                    NetAmount,
                    SUM(NetAmount ) over (partition by ProdDesc) as Total 
            from #Comtempt1
             ) as dat 
                    pivot(
            SUM(NetAmount) for MonthYr in 
            (' + @pvt_cols + '))pvt'

print @sqlquery

exec sp_executesql @sqlquery
于 2012-11-29T22:03:29.397 に答える