如何在 SQL Server 中将行动态转换为列
Posted
技术标签:
【中文标题】如何在 SQL Server 中将行动态转换为列【英文标题】:How to dynamically convert rows to columns in SQL Server 【发布时间】:2019-06-26 12:55:31 【问题描述】:我想动态地将行转换为列,对于我在查询下面给出的示例数据。
create table testtable
(
tableid int primary key identity(1,1),
tableDatetime datetime,
names varchar(50),
tablevalue decimal(18,9)
)
go
insert into testtable
select '2019-06-13 13:56:39.117', 'test1',23.45 union all
select '2019-06-13 13:56:39.117', 'test2',33.45 union all
select '2019-06-13 13:56:39.117', 'test3',10.45 union all
select '2019-06-13 13:56:39.117', 'test4',90.45 union all
select '2019-06-13 14:01:41.280', 'test1',33.45 union all
select '2019-06-13 14:01:41.280', 'test2',53.45 union all
select '2019-06-13 14:01:41.280', 'test3',41.45 union all
select '2019-06-13 14:01:41.280', 'test4',93.45 union all
select '2019-06-13 14:06:42.363', 'test1',30.45 union all
select '2019-06-13 14:06:42.363', 'test2',13.45 union all
select '2019-06-13 14:06:42.363', 'test3',23.45 union all
select '2019-06-13 14:06:42.363', 'test4',73.45
go
select * from testtable
我要转换成附加图片格式的数据
谢谢,
【问题讨论】:
预期结果中的最后一个值应该是 73.45,对吧? 【参考方案1】:您可以根据您的表结构尝试动态 sql 查询。
GO
declare @query varchar(max)
set @query = (select stuff( (select distinct ',' + names from testtable for xml path ('')) ,1,1,'') as d)
declare @resquery nvarchar(max)
set @resquery = '
select * from (
select tableDatetime , names , tablevalue from testtable
) as d
pivot ( max(tablevalue) for names in ( ' + @query + ' ) ) as pv'
exec sp_executesql @resquery
GO
请根据您的表结构使用它,这将为您当前的表数据创建动态列名。这进一步用于枢轴将您的行转换为列。
将其标记为已接受,或发表评论以供进一步查询。
【讨论】:
以上是关于如何在 SQL Server 中将行动态转换为列的主要内容,如果未能解决你的问题,请参考以下文章