sql - 如何在 Excel 或 SQL 中将数据从宽格式传输到长格式?

标签 sql sql-server excel sql-server-2008 tsql

我有如下所示的数据。知道如何在 Excel 或 SQL 中从宽格式转换为长格式。

ID       TOTAL    SCORE   PLAYER
34543    12342     456    45
45632    34521     241    33

输出:

ID        DATA_TYPE   VALUE
34543      TOTAL      12342
34543      SCORE      34521
34543      PLAYER     45
45632      TOTAL      34521
45632      SCORE      241
45632      PLAYER      33

最佳答案

我首选的取消透视方法是使用 apply:

select t.id, v.*
from t cross apply
     (values ('TOTAL', total), ('SCORE', score), ('PLAYER', player)
     ) v(DATA_TYPE, VALUE);

除了相当简洁之外,这是对横向连接的一个很好的介绍。这是 SQL 中非常强大的构造,可用于许多其他目的(与 UNPIVOT 不同)。它还只扫描表一次,因此比 UNION ALL 更高效。

关于sql - 如何在 Excel 或 SQL 中将数据从宽格式传输到长格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50209372/

相关文章:

php - 选择查询未正确返回

SQL 表 - 根据条件合并行

sql-server - 从 SQL Server 获取客户端操作系统用户名

php - PDO INSERT不在mysql中注册重复记录

sql - 使用 T-SQL 解析 URL 参数

sql - 如何在 SQL Server 中截断日期时间?

vba - Excel InputBox VBA取消功能

java - 如何重用使用docx4j开发的代码到POI 3.12来解析xlsx文件

arrays - VBA 第一个数组项始终为空

c# - 如何在 C# (.NET 2.0) 中获取给定 TableAdapter 和 SqlDataAdapter 的 Sql 命令对象