2013-11-15 5 views
0
select @cols = 

       STUFF((SELECT ',' + QUOTENAME(grade)   
       from #temp   
       group by grade   

     FOR XML PATH(''), TYPE   
     ).value('.', 'NVARCHAR(MAX)')   
    ,1,1,'')   

    select @colsRollup = STUFF((SELECT ', Sum(' + QUOTENAME(grade) + ') as '+QUOTENAME  (grade)   
       from #temp  
       group by grade   

     FOR XML PATH(''), TYPE   
     ).value('.', 'NVARCHAR(MAX)')   
    ,1,1,'')  

    set @query  

     =  'SELECT * into #temp3 from 
      (
       SELECT lob as "Vertical", '+ @colsRollup + '  
       FROM   
        (  
        SELECT lob,' + @cols + ' from   
         (  
         select lob,   
          grade,   
          asso_count   
          from #temp   
         ) x   
        pivot   
          (  
          count(grade)   
          for grade in (' + @cols + ')   
          ) p   
       ) x1 
        GROUP BY lob with ROLLUP)x2'   

     execute(@query) 

Я пытаюсь создать динамические столбцы и вставить их во временную таблицу. Но это порождает ошибку, говорящую, что # temp3 не является допустимым именем объекта. код работает, если я не пытаюсь вставить динамически создаваемые столбцы в таблицу.SQL Динамические столбцы

+1

mysql или sql-server? Выберите один и отредактируйте теги. (Он выглядит как sql-server) – slavoo

+0

Привет, его SQL Server. –

+0

@prasanthunnikrishnan Как вы это делаете? В хранимой процедуре или каким-то другим способом? – jpw

ответ

1

Если выполнить код, а затем попытаться получить доступ к #temp3 таблице как:

execute(@query) 
select * from #temp3 

Я думаю, что это уйдет из сферы, которая может объяснить сообщение об ошибке. Вы могли бы попытаться изменить ваш запрос, чтобы включить SELECT как:

SET @query = ' 
SELECT * INTO #temp3 FROM 
    (
    SELECT lob as "Vertical", '+ @colsRollup + '  
    FROM   
    (  
     SELECT lob,' + @cols + ' from (select lob, grade, asso_count from #temp) x 
     PIVOT (count(grade) for grade in (' + @cols + ')) p   
    ) x1 
     GROUP BY lob with ROLLUP 
    ) x2; SELECT * FROM #temp3'  

Обратите внимание, как последняя линия теперь включает ; SELECT * FROM #temp3

Если добавить, что вы должны получить результаты обратно, если это то, что вы хотите ,

+1

Спасибо. Работает. :) –

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