我正在寻找一种有效的方法将行转换为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 |
---------------------------------------------------------------------
我该如何 Build 结果?
2 回答
有几种方法可以将多行中的数据转换为列 . 在SQL Server中,您可以使用
PIVOT
函数将数据从行转换为列:见Demo .
如果您想要转置未知数量的
columnnames
,则可以使用动态SQL:见Demo .
如果您不想使用
PIVOT
函数,则可以使用带有CASE
表达式的聚合函数:见Demo .
这也可以使用多个连接来完成,但是您需要一些列来关联样本数据中没有的每一行 . 但基本语法是:
由于旋转数据仍然很热,我决定从中添加一些东西 . 这是一种方法,而不仅仅是一个脚本,但为您提供了更多的可能性 . 首先需要部署3个脚本:1)用户定义的TABLE类型[
ColumnActionList
] - >保存数据作为参数2)SP [proc_PivotPrepare
] - >准备我们的数据3)SP [proc_PivotExecute
] - >执行脚本从执行第一个查询(通过传递源数据库和表名),您将获得第二个SP的预先创建的执行查询,您所要做的就是定义来自您的源的列:稳定值(将用于集中基于的值)Dim(要用于转动的列)
名称和数据类型将自动定义!
我不能在任何 生产环境 环境中推荐它,但是为adhoc BI请求做了工作 .