在sql server中有效地将行转换为列
我正在寻找一种有效的方法将SQL服务器中的行转换成列,我听说PIVOT的速度不是很快,而且我需要处理大量的记录。
这是我的例子。
-------------------------------
| Id | Value | ColumnName |
-------------------------------
| 1 | John | FirstName |
| 2 | 2.4 | Amount |
| 3 | ZH1E4A | PostalCode |
| 4 | Fork | LastName |
| 5 | 857685 | AccountNumber |
-------------------------------
这是我的结果。
---------------------------------------------------------------------
| FirstName |Amount| PostalCode | LastName | AccountNumber |
---------------------------------------------------------------------
| John | 2.4 | ZH1E4A | Fork | 857685 |
---------------------------------------------------------------------
我怎样才能建立这个结果?
358
2
有几种方法可以将数据从多行转化为列。
使用 "PIVOT "函数
在SQL Server中,你可以使用`PIVOT'函数来将数据从行转化为列。
见演示。
有未知数量的 "columnnames "的透视
如果你有一个未知数量的 "columnnames "想要转置,那么你可以使用动态SQL。
见演示。
使用一个聚合函数
如果你不想使用
PIVOT
函数,那么你可以使用一个带有CASE
表达式的聚合函数。见演示。
使用多重连接
这也可以用多重连接来完成,但你需要一些列来关联每一条记录,而你的样本数据中并没有这些列。但基本的语法是:。
由于数据透视仍然是一个热点,我决定添加一些我的形式。这是个方法,而不仅仅是一个脚本,但给你更多的可能性。首先,你需要部署3个脚本。
ColumnActionList
] -> 持有数据作为参数proc_PivotPrepare
] -> 准备好我们的数据proc_PivotExecute
] -> 执行脚本