SQL Server: как создать таблицу из сводной таблицы?

У меня есть такой стол,

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

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

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

3 ответа

Решение

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

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

Схема предоставлена ​​Ханукей. (Работал для меня)

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

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

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

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

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

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

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;
Другие вопросы по тегам