Может быть сделано за пару шагов, но запутанный характер этого ответа должен указать вам, что вы сражаетесь здесь с сервером sql, а не с ним.Старайтесь изо всех сил найти другой способ структурировать свои отчеты так, чтобы в этом не было необходимости, прежде чем предпринимать такие радикальные меры, как эти.
1) Инкапсулируйте / взломайте свой первоначальный сводный запрос как хранимую процедуру без параметров.Если вам нужно передать какие-либо данные в процедуру, вы должны структурировать ее как глобальная временная таблица (## префиксная временная таблица), например,
CREATE PROCEDURE dynamic_meantime_pivot AS
DECLARE
@cols nvarchar(max) = STUFF(
(SELECT ',' + QUOTENAME(AD.MonthFormat) FROM ##tempMonthFormat AD FOR xml PATH (''), TYPE)
.value('.', 'nvarchar(max)'), 1, 1, '')
@Selectcols nvarchar(max) = STUFF(
(SELECT ',' + ISNULL(@Selectcols + ',','')+ 'ISNULL(' + QUOTENAME(AD.MonthFormat) + ', 0) AS ' + QUOTENAME(AD.MonthFormat) FROM ##tempMonthFormat AD FOR xml PATH (''), TYPE)
.value('.', 'nvarchar(max)'), 1, 1, '');
Declare @FINALQUERY varchar(max) = '
SELECT Name,[Issue],' + @Selectcols + ' FROM
(
SELECT * FROM ##Meantimeresult
) Y
PIVOT
(
SUM(MT)
FOR [Monthformat] IN (' + @cols + ')
) p GROUP BY ' + @cols+',[Issue], Name'
EXEC(@FINALQUERY)
2)Настройте все глобальные временные таблицы, требуемые описанной выше процедурой.
3) Вызовите процедуру с помощью функции OPENROWSET, как показано ниже:
SELECT * INTO #dynamic_meantime_table FROM OPENROWSET('SQLNCLI', 'Server=<your_sql_server_instance_name_here>;Trusted_Connection=yes;',
'EXEC dynamic_meantime_pivot')
См. Также этот превосходный ответ относительно OPENROWSET.
Вставить результаты хранимой процедуры во временную таблицу