在 Sql Server 中使用 Pivot/unpivot 将单行转换为单列

Posted

技术标签:

【中文标题】在 Sql Server 中使用 Pivot/unpivot 将单行转换为单列【英文标题】:Convert Single Row To Single Column Using Pivot/unpivot In Sql Server 【发布时间】:2021-01-25 10:28:14 【问题描述】:

我有一个单行表,如下所示:

+-------+-------+-------+-------+-------+
| (Col1)| (Col2)| (Col3)| (Col4)| (Col5)|
+-------+-------+-------+-------+-------+
| Data1 | Data2 | Data3 | Data4 | Data5 |
+-------+-------+-------+-------+-------+

我想做的事情似乎很简单,但我无法在任何地方找到它的任何例子。我想要的只是将上面的行转换为单列,如下所示:

+-------------+
|(Column Name)|
+-------------+
|Data1        |
+-------------+
|Data2        |
+-------------+
|Data3        |
+-------------+
|Data4        |
+-------------+
|Data5        |
+-------------+

感谢您的帮助。

【问题讨论】:

您的表是否/将始终只有一条记录?如果它有超过 1 行,你能告诉我们它会是什么样子吗? 了解 UNOIN。 答案取决于您真正使用的RDBMS。不要标记多个 RDBMS,只标记您真正使用的一个。 UNPIVOTmysql 中不受支持,据我所知,它是一个 T-SQL 运算符。 UNPIVOTCROSS APPLY (VALUES(col1),(col2... @TimBiegeleisen 这是 UNOIN 查询的结果集,它总是期望有单行多列。 【参考方案1】:

我建议使用apply:

select v.col
from t cross apply
     (values (col1), (col2), (col3), (col4), (col5)) v(col);

我强烈推荐apply 而不是unpivot。但是,它们不是 100% 等效的,因为 unpivot 过滤掉了 NULL 值。

【讨论】:

以上是关于在 Sql Server 中使用 Pivot/unpivot 将单行转换为单列的主要内容,如果未能解决你的问题,请参考以下文章

Query (SQL Server 2008 Express) 在 SQL Server Management Studio 中有效,但在 Delphi 中使用 ADODB 无效

sql server中如何实现在异地访问数据库

在 sql server 中,使用整数变量构建动态 sql

如何使用sql server数据库中的标量值函数

在 sql 适配器过程中使用 WL.Server.invokeSQLStatement 返回的结果集

Azure SQL Server 备份:需要使用 ARM 模板在 Azure SQL Server 备份中取消注册容器和重新转移数据库