【问题标题】:SQL Server: how to create a table from a pivot table?SQL Server:如何从数据透视表创建表?
【发布时间】:2016-12-08 09:46:28
【问题描述】:

我有一张这样的桌子,

我已经使用代码将其转为以下内容,

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

如何从数据透视表 pv 创建一个新表?我试过 select * into newTable,但似乎不起作用。

【问题讨论】:

  • 试试动态sql
  • 虽然简单而正确的答案是像你最初尝试的那样使用“into newTable”,但你必须有权限这样做+一旦桌子在那里,你需要考虑你会做什么下次。删除并重新创建?截断并插入?还是只是将其保留为静态表?这些都取决于您的需求,并且您可能希望有一个临时表。

标签: sql sql-server pivot pivot-table


【解决方案1】:

您可以使用 INTO 即时创建它

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

使用 Chanukya 提供的 Schema。 (为我工作)

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

【讨论】:

    【解决方案2】:

    试试这个:

    确保您选择的列与新表中的列相同。

    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;
    

    【讨论】:

    • 这是否意味着我必须先创建一个新表才能执行此操作? @Jibin Balachandran
    • @Wilheim 是的,您必须创建一个具有相同列数和数据类型的表。如果您只想在整个查询过程中访问结果集,则可以使用临时表。点赞INSERT INTO #TempTbl,可以在TempTbl上查询。
    【解决方案3】:

    最简单的方法是使用您最初猜测的“into”子句。由于您没有分享您的代码,我们不知道您可能做错了什么。只需将“into tableName”添加到您自己的数据透视代码中:

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

    PS:我假设你有创建表的权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      相关资源
      最近更新 更多