2016-12-08 4 views
1

У меня есть таблица, как это,SQL Server: как создать таблицу из сводной таблицы?

enter image description here

и я поворачиваем его к следующему с кодом,

select * 
from 
(
    select * 
    from table1 
) a 
pivot 
(
avg(col3) 
for col2 in ([a],[b],[c],[d]) 
) as pv; 

enter image description here

Как создать новую таблицу из сводная таблица pv? Я попытался выбрать * в newTable, но он, похоже, не работает.

+0

попробуйте динамический sql – artm

+0

Хотя простой и правильный ответ заключается в том, чтобы использовать «в newTable», как вы пробовали изначально, вы должны иметь разрешение на это +, как только таблица будет там, вам нужно подумать о том, что вы будете делать дальше время. Бросить и воссоздать? Усекать и вставлять? Или просто сохранить его как статическую таблицу? Все это зависит от ваших потребностей и, скорее всего, вы захотите иметь временную таблицу. –

ответ

1

Вы можете создать его на лету с INTO

SELECT * INTO #TAB 
FROM 
(
    SELECT * 
    FROM TABLE1 
) A 
PIVOT 
(
AVG(COL3) 
FOR COL2 IN ([A],[B],[C],[D]) 
) AS PV; 

со схемой, представленной Chanukya. (работал для меня)

CREATE TABLE #D 
(
COL1 INT, 
COL2 VARCHAR(10), 
COL3 INT 
) 
INSERT INTO #D VALUES 
(1,'A',11), 
(2,'B',22), 
(3,'C',33), 
(4,'D',44) 

SELECT * INTO #PIVOT_RESULT 
FROM (
SELECT COL1, COL2, COL3 FROM #D 
)AS A 
PIVOT 
(
AVG(COL3) 
FOR COL2 IN ([A],[B],[C],[D]) 
) AS PV; 


SELECT * FROM #PIVOT_RESULT 
0

Попробуйте это:

Убедитесь, что столбцы в вашем отборном равно столбцы в новой таблице.

INSERT INTO NewTable 
select * 
from 
(
    select * 
    from table1 
) a 
pivot 
(
avg(col3) 
for col2 in ([a],[b],[c],[d]) 
) as pv; 

Если вы не хотите реальную таблицу, вы хотите, эти данные будут доступны по всему вашему запросу, то вы можете использовать временную таблицу #TempTbl, а затем доступ к данным из #TempTbl.

INSERT INTO #TempTbl 
select * 
from 
(
    select * 
    from table1 
      ) a 
pivot 
(
    avg(col3) 
    for col2 in ([a],[b],[c],[d]) 
           ) as pv; 
+0

означает ли это, что мне нужно создать новую таблицу прежде, чем я это сделаю? @Jibin Balachandran – Wilheim

+0

@Wilheim да, вам придется создать таблицу с таким же количеством столбцов и типа данных. Если вы просто хотите получить доступ к набору результатов по всему запросу, вы можете использовать таблицу temp. Подобно 'INSERT INTO # TempTbl' и может запрашивать запрос на' TempTbl'. –

0

Самый простой способ сделать это состоит в использовании «в» статьи, как вы уже догадались изначально. Поскольку вы не делились своим кодом, мы не знаем, что вы, возможно, сделали неправильно. Просто добавьте «в TABLENAME» свой код поворотном:

select * into myPivotedTable 
from 
(
    select * 
    from table1 
) a 
pivot 
(
avg(col3) 
for col2 in ([a],[b],[c],[d]) 
) as pv; 

PS: Я предполагаю, что у вас есть разрешение на создание таблицы.

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