将旧 SQL 表中的数据插入到新表中,列更改为行

Posted

技术标签:

【中文标题】将旧 SQL 表中的数据插入到新表中,列更改为行【英文标题】:Insert Data from old SQL table, to new one with columns changed to rows 【发布时间】:2017-11-16 20:45:30 【问题描述】:

我目前有一张类似这样的表格:

Old Table(example only)

我需要将数据导入新表,但将列标题设置为行和每个行的值。与此类似。

New Table(example only)

我会使用 Pivot 还是 Unpivot 来执行此操作?我有很多大约 700 行的列需要以这种方式进行转换。

【问题讨论】:

您使用什么软件/语言?你尝试了什么? 【参考方案1】:

你应该选择unpivot,试试下面的查询。一般来说,Pivot 会减少总行数,而Unpivot 会增加行数。

select SN,Property,Value

from tbl

unpivot

(Value for Property in (Property1,Property2,Property3,Property4) ) as tblunpvt

【讨论】:

所以我在上面尝试了您的代码,当我只使用 Property1 运行它时它工作正常,但是当我不再包含时,我收到以下错误:“Property2”列的类型与UNPIVOT 列表中指定的其他列。 没关系想通了。所有列都必须是相同的数据类型。感谢您的帮助。【参考方案2】:

如果您没有很多列,您可以随时尝试:

SELECT SN, 'Property1' as Property, Property1 as Value from <TABLE>
UNION ALL
SELECT SN, 'Property2' as Property, Property2 as Value from <TABLE>
UNION ALL
SELECT SN, 'Property3' as Property, Property3 as Value from <TABLE>

【讨论】:

谢谢,但正如我提出的问题,我有很多列和行。 我同意 UNPIVOT 是一个很好的解决方案,但听起来这是一次性的事情,所以很多列都是什么...... 如果列确实具有该 Property 格式,在 Excel 工作表中创建所有选择语句应该非常简单 :) 但我明白你的意思,如果你可以使用枢轴/ unpivot 是一种更精致的方法 @BrunoMarques 他们没有,这只是一个例子。 您始终可以从 sys.columns 获取所有列名并使用 Excel 电子表格构建查询

以上是关于将旧 SQL 表中的数据插入到新表中,列更改为行的主要内容,如果未能解决你的问题,请参考以下文章

SQL之复制表

如何连接两个表中的数据并将结果插入到新表中?

创建表,然后将数据从另一个表插入到新表中

新建表需要原表的数据,mysql 如何把查询到的结果插入到新表中

SQL SELECT INTO 语句

SQL Server如何将查询的内容保存到新的sql 表中