如何动态旋转的结果存储到一个临时表没有为一个表中指定列名?

问题描述 投票:1回答:1

我试图对一个表做动态列支点。我能做到这一点,得益于这里提供的解释(SQL Server dynamic PIVOT query?

create table pivottest (Columnname varchar(100), value varchar(100)) ; 
insert into pivottest values ('Age', '25'), 
('Email', '[email protected]'), 
('Phone', '888888888'), 
('Name', 'Rob'), 
('Age', '20'), 
('Email', '[email protected]'), 
('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  

另外,我可以从临时表中的结果,但我必须与所有所需的列先创建表,然后我可以把它用这种方式。但我想做像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得到看起来像这样。如果我从选择*输出同样为可能的话#TEMP表选项,将是有益的。

Age   Email         Name    Phone
20  [email protected]   Ben     888888888
20  [email protected]   Bob     999999999
25  NULL            Rob     NULL
sql-server tsql dynamic-sql
1个回答
0
投票

好像我可以利用全局临时表以这种方式让我想要的结果。

 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  [email protected]   Ben     888888888
20  [email protected]   Bob     999999999
25  NULL            Rob     NULL  
© www.soinside.com 2019 - 2024. All rights reserved.