Я пытался сделать динамический столбец столбца для таблицы.
Я смог это сделать, благодаря предоставленному здесь объяснению.
( 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