在 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,只标记您真正使用的一个。UNPIVOT
在 mysql 中不受支持,据我所知,它是一个 T-SQL 运算符。
UNPIVOT
或 CROSS 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 适配器过程中使用 WL.Server.invokeSQLStatement 返回的结果集
Azure SQL Server 备份:需要使用 ARM 模板在 Azure SQL Server 备份中取消注册容器和重新转移数据库