2015-11-12 5 views
0

Я следующий T-SQL:INSERT INTO Temp Таблица Dynamic Pivot

select  d.OutageType + '/' + e.Facility Outage, 
      c.MaterialScopeCode, 
      count(a.ItemNo) CountofItemNo 
into  #tt 
from  _OutageMaterial a 
      inner join _OutageSchedule b on a.OutageScheduleID = b.OutageScheduleID 
      inner join _MaterialScope c on a.MaterialScopeID = c.MaterialScopeID 
      inner join _OutageType d on b.OutageTypeID = d.OutageTypeID 
      inner join _Facility e on b.FacilityID = e.FacilityID 
where  ReqQty <> 0 
group by c.MaterialScopeCode, e.Facility, d.OutageType 
order by d.outagetype, e.Facility, c.MaterialScopeCode 


-- /// RESULT /// -- 
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX) 
DECLARE @ColumnName AS NVARCHAR(MAX) 

--Get distinct values of the PIVOT Column 
SELECT  @ColumnName= ISNULL(@ColumnName + ',','') + QUOTENAME(Outage) 
FROM  (
      SELECT DISTINCT   Outage 
      FROM     #tt 
      ) AS Scope 

--Prepare the PIVOT query using the dynamic 
SET @DynamicPivotQuery = 
N'SELECT MaterialScopeCode as Scope, ' + @ColumnName + ' 
FROM #tt 
PIVOT(SUM(CountofItemNo) 
FOR Outage IN (' + @ColumnName + ')) AS PVTTable' 

--Execute the Dynamic Pivot Query 
EXEC sp_executesql @DynamicPivotQuery 

Я пробовал много раз, но до сих пор .. ошибка. Я не мог выбрать временную таблицу, потому что она не создана. Недопустимый объект. Я хочу поместить результат динамического поворота в таблицу temp.
Как я могу это сделать? Пожалуйста, порекомендуйте.

спасибо.

+0

Вы пытаетесь создать временную таблицу внутри динамического запроса. Если да, где это та часть –

+0

Я хочу поместить результат динамического поворота в таблицу #temp и выбрать ее. – Haminteu

+0

Попробуйте это в своем динамическом запросе 'FROM #tt в ## temp PIVOT (SUM (CountofItemNo)'. ** Примечание: ** Это вызовет ошибку, если запрос выполняется параллельно в несколько сеансов –

ответ

1

что @ MM93 сказал вам, что это правильный ответ, но вот полный код

IF OBJECT_ID('TEMPDB.dbo.##TempTableTesting') IS NOT NULL DROP TABLE ##TempTableTesting 

declare @sql nvarchar(300) = 'SELECT MaterialScopeCode as Scope, ' + @ColumnName + ' 
into ##TempTableTesting 
FROM #tt 
PIVOT(SUM(CountofItemNo) 
FOR Outage IN (' + @ColumnName + ')) AS PVTTable' 

execute sp_executesql @sql 

select * from ##TempTableTesting 

Так что в вашем случае вы должны использовать ## TempTable в этих таблицах (глобальные) доступны для всех сеансов, #TempTable не будет работать в вашем случае

1

Я ответил на это here, поэтому я не буду дублировать, но короткий ответ заключается в том, что можно вставить результаты динамического поворота в локальную (не глобальную) таблицу темп, вам просто нужно создать таблицу temp с одним столбцом, а затем добавить другие столбцы динамически.

Смежные вопросы