Как сохранить результат Dymanic pivot во временной таблице без указания имен столбцов для таблицы? - PullRequest
0 голосов
/ 02 января 2019

Я пытался сделать динамический столбец столбца для таблицы. Я смог это сделать, благодаря предоставленному здесь объяснению. ( SQL Server динамический запрос PIVOT? )

create table pivottest (Columnname varchar(100), value varchar(100)) ; 
insert into pivottest values ('Age', '25'), 
('Email', 'Rob@gmail.com'), 
('Phone', '888888888'), 
('Name', 'Rob'), 
('Age', '20'), 
('Email', 'Bob@gmail.com'), 
('Phone', '999999999'), 
('Name', 'Bob'), 
('Age', '20'), 
('Name', 'Ben'), 
(null, null) 

Я поступаю так же, основываясь на ответах, приведенных в ссылке?

select *, ROW_NUMBER() over (partition by columnname order by value) Rownum  
into #temp from pivottest 

DECLARE @cols AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.Columnname) 
        FROM #temp c
        FOR XML PATH(''))  
    ,1,1,'')


set @query = 'SELECT   '+@cols+'  from 
        (
            select Columnname, Rownum 
                , value
                from #temp
       ) x
        pivot 
        (
             max(Value)
            for Columnname in (' + @cols + ')
        ) p '

Execute @query

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

Таким образом я могу выбрать * в некоторую физическую таблицу. Я могу ссылаться на физическую таблицу каждый раз. Но я хотел сделать в #temp таблице

set @query = 'SELECT   '+@cols+' into  dynamicpivotdata from 
        (
            select Columnname, Rownum 
                , value
                from #temp
       ) x
        pivot 
        (
             max(Value)
            for Columnname in (' + @cols + ')
        ) p '


execute(@query) 
select * from  dynamicpivotdata  

Кроме того, я могу получить результаты из таблицы Temp, но сначала мне нужно создать таблицу со всеми необходимыми столбцами, а затем я могу ссылаться на нее таким образом. Но я хотел сделать как Select * в для временной таблицы, как я сделал для физической таблицы без указания имен столбцов. Есть ли способ сохранить данные во временной таблице?

 create table #temp5 (Age int ,
 Email varchar(100),
 Name varchar(100),
 Phone varchar(15))

 set @query = 'SELECT   '+@cols+'   from 
        (
            select Columnname, Rownum 
                , value
                from #temp
       ) x
        pivot 
        (
             max(Value)
            for Columnname in (' + @cols + ')
        ) p '


insert into #temp5  execute(@query) 
select * from #temp5 

Мой окончательный вывод, который я получаю из # temp5 и dynamicpivotdata, выглядит следующим образом. Было бы полезно, если бы я мог получить тот же вывод из select * в опцию #temp table, если это возможно.

Age   Email         Name    Phone
20  Bob@gmail.com   Ben     888888888
20  Rob@gmail.com   Bob     999999999
25  NULL            Rob     NULL

1 Ответ

0 голосов
/ 07 февраля 2019

Кажется, что я мог бы использовать глобальную временную таблицу таким образом, чтобы получить желаемые результаты.

 set @query = 'SELECT   '+@cols+' into  ##temp1 from 
    (
        select Columnname, Rownum 
            , value
            from #temp
   ) x
    pivot 
    (
         max(Value)
        for Columnname in (' + @cols + ')
    ) p '


execute(@query) 
select * from  ##temp1    


Age   Email         Name    Phone
20  Bob@gmail.com   Ben     888888888
20  Rob@gmail.com   Bob     999999999
25  NULL            Rob     NULL  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...