使用SQL查询将行转换为列

使用SQL查询将行转换为列,sql,sql-server-2005,tsql,Sql,Sql Server 2005,Tsql,我有一个临时表,其中有一列四行 Table ------ vaibhav IBM 12 'T' 我需要一张临时桌 Col1 Col2 Col3 Col4 ------ ----- ----- ------ Vaibhav IBM 12 'T' 有人知道吗?我相信您正在寻找直接来自msdn的Pivot子句 可以使用PIVOT和UNPIVOT关系运算符将表值表达式更改为另一个表。PIVOT通过将表达式中一列的唯一值转换为输出中的多列来旋

我有一个临时表,其中有一列四行

Table
------
vaibhav
IBM
12
'T'
我需要一张临时桌

Col1     Col2    Col3     Col4
------   -----  -----    ------ 
Vaibhav  IBM      12       'T'

有人知道吗?

我相信您正在寻找直接来自msdn的Pivot子句

可以使用PIVOT和UNPIVOT关系运算符将表值表达式更改为另一个表。PIVOT通过将表达式中一列的唯一值转换为输出中的多列来旋转表值表达式,并在需要时对最终输出中所需的任何剩余列值执行聚合。UNPIVOT通过将表值表达式的列旋转为列值来执行与透视相反的操作


有关更多信息,请参阅。

我相信您正在查找直接来自msdn的Pivot子句

可以使用PIVOT和UNPIVOT关系运算符将表值表达式更改为另一个表。PIVOT通过将表达式中一列的唯一值转换为输出中的多列来旋转表值表达式,并在需要时对最终输出中所需的任何剩余列值执行聚合。UNPIVOT通过将表值表达式的列旋转为列值来执行与透视相反的操作


有关更多信息,请参阅。

标准PIVOT语句的问题在于,您需要事先知道列值,以便可以在“for xxx in('x','y','x'…)语句中定义它们

为了解决这个问题,您需要执行一些动态SQL并创建一个包含列的字符串

下面是一篇有趣的文章:

我使用这种技术构建了许多PIVOT查询,尽管动态SQL不能像硬编码的存储过程那样进行优化,但它们工作得很好


如果需要,我可以发布一些示例代码。

标准PIVOT语句的问题是,您需要事先知道列值,以便可以在“FOR xxx in('x','y','x'…)语句中定义它们

为了解决这个问题,您需要执行一些动态SQL并创建一个包含列的字符串

下面是一篇有趣的文章:

我使用这种技术构建了许多PIVOT查询,尽管动态SQL不能像硬编码的存储过程那样进行优化,但它们工作得很好

如果需要,我可以发布一些示例代码