我正在寻找一种在SQLServer中将行转换为列的有效方法,我听说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 |
---------------------------------------------------------------------
如何建立结果?
3条答案
按热度按时间4jb9z9bj1#
有几种方法可以将数据从多行转换为列。
使用pivot
在sql server中,可以使用
PIVOT
函数将数据从行转换为列:请参见演示。
列名数目未知的数据透视
如果你有未知数量的
columnnames
如果要转置,则可以使用动态sql:请参见演示。
使用聚合函数
如果您不想使用
PIVOT
函数,则可以将聚合函数与CASE
表达式:请参见演示。
使用多个联接
这也可以使用多个联接来完成,但是您需要一些列来关联示例数据中没有的每一行。但基本语法是:
1bqhqjot2#
这是一个方法,而不仅仅是一个脚本,但给你更多的灵活性。
首先有3个对象:
用户定义的表类型[
ColumnActionList
]->将数据作为参数保存标准普尔[
proc_PivotPrepare
]->准备我们的数据标准普尔[
proc_PivotExecute
]->执行脚本创建类型[dbo].[columnactionlist]作为表([id][smallint]not null,[columnname]nvarchar not null,[action]nchar not null);去
通过执行第一个查询(通过传递source db和table name),您将得到第二个sp的一个预创建的执行查询,您所要做的就是定义源中的列:+stable+value(将用于在此基础上集中值)+dim(要用于透视的列)
名称和数据类型将自动定义!
我不能推荐任何生产环境,但做的工作,即席商务智能请求。
myss37ts3#
请试一试