Sql server 将表列转换为行
我有一个SQL Server表,我想在其中将列转换为行(从宽到高) 当前表格格式: 所需表格格式:Sql server 将表列转换为行,sql-server,tsql,Sql Server,Tsql,我有一个SQL Server表,我想在其中将列转换为行(从宽到高) 当前表格格式: 所需表格格式: 我已经研究了一个方法调用透视/取消透视,但我似乎无法按照我需要的方式获得格式。谢谢你的帮助 UnPivot当然性能更好,但是这里有一种方法可以动态地UnPivot几乎任何表、查询或记录,而不实际使用动态SQL 示例 Declare @YourTable Table (Date date,cost1 int,cost2 int,cost3 int) Insert Into @YourTable
我已经研究了一个方法调用透视/取消透视,但我似乎无法按照我需要的方式获得格式。谢谢你的帮助 UnPivot当然性能更好,但是这里有一种方法可以动态地UnPivot几乎任何表、查询或记录,而不实际使用动态SQL 示例
Declare @YourTable Table (Date date,cost1 int,cost2 int,cost3 int)
Insert Into @YourTable Values
('6/30/2017',3,4,5),
('6/24/2017',3,4,5),
('6/22/2017',3,4,5)
Select C.*
From @YourTable A
Cross Apply ( values (cast((Select A.* for XML RAW) as xml))) B(XMLData)
Cross Apply (
Select Item = a.value('local-name(.)','varchar(100)')
,Value = a.value('.','varchar(max)')
From B.XMLData.nodes('/row') as C1(n)
Cross Apply C1.n.nodes('./@*') as C2(a)
Where a.value('local-name(.)','varchar(100)') not in ('Column1','Column2')
) C
返回
Item Value
Date 2017-06-30
cost1 3
cost2 4
cost3 5
Date 2017-06-24
cost1 3
cost2 4
cost3 5
Date 2017-06-22
cost1 3
cost2 4
cost3 5
Date Item Value
2017-06-30 cost1 3
2017-06-30 cost2 4
2017-06-30 cost3 5
2017-06-24 cost1 3
2017-06-24 cost2 4
2017-06-24 cost3 5
2017-06-22 cost1 3
2017-06-22 cost2 4
2017-06-22 cost3 5
现在,稍微扭转一下
Select A.Date
,C.*
From @YourTable A
Cross Apply ( values (cast((Select A.* for XML RAW) as xml))) B(XMLData)
Cross Apply (
Select Item = a.value('local-name(.)','varchar(100)')
,Value = a.value('.','varchar(max)')
From B.XMLData.nodes('/row') as C1(n)
Cross Apply C1.n.nodes('./@*') as C2(a)
Where a.value('local-name(.)','varchar(100)') not in ('Date','Column2')
) C
返回
Item Value
Date 2017-06-30
cost1 3
cost2 4
cost3 5
Date 2017-06-24
cost1 3
cost2 4
cost3 5
Date 2017-06-22
cost1 3
cost2 4
cost3 5
Date Item Value
2017-06-30 cost1 3
2017-06-30 cost2 4
2017-06-30 cost3 5
2017-06-24 cost1 3
2017-06-24 cost2 4
2017-06-24 cost3 5
2017-06-22 cost1 3
2017-06-22 cost2 4
2017-06-22 cost3 5
您的意思是一个实际的表,还是您想要一个结果集?将日期和成本存储在同一列中是一个非常糟糕的主意抱歉,我需要将此结果集插入一个新表中。不只是您需要的格式,它到底有什么问题?