SELECT v.rep,
Sum(v.[Gross Rev]) as GrossRev,
DATENAME(month, v.Funded) as Mth ,
month(v.Funded) as MthI
Into #temp
FROM CRMPROD_01.dbo.v_P_Reporting v
WHERE v.Funded is not null
and v.Status <> 'Closed'
and (YEAR(v.Funded) = YEAR(getdate()))
and (MONTH(v.Funded) > MONTH(getdate())-@)
Group by rep, v.Funded
ORDER BY v.rep, month(v.Funded)
--Create Dynamic SQl and Pivot
declare @sql varchar(4000)
declare @columns varchar(8000)
declare @totals varchar(8000)
declare @averages varchar(8000)
select @columns = coalesce(@columns+',','') + '[' + Mth + ']',
@totals = coalesce(@totals+'+','') + 'isnull([' + Mth + '],0)',
@averages = coalesce(@averages+'+','') + 'isnull(abs(sign([' + Mth + '])),0)'
from #temp
group by Mth, MthI
order by MthI
set @sql = '
SELECT [rep], ' + @columns +
',[Total]=' + @totals +
',[AVG]=1.0*(' + @totals + ')/isnull(nullif(' + @averages + ',0),0)
FROM
(SELECT [rep], [GrossRev], [Mth] as Mth from #temp) src
PIVOT
(Sum ([GrossRev]) FOR Mth IN (' + @columns + ') ) AS pvt'
EXEC (@sql)
Drop table #temp
|