如何在 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 中将行动态转换为列的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 或 C# 代码中将行转换为列

如何在 SQL 中将行转换为列值 [关闭]

如何在sql中将行转换为列

在 SQL 中将行转换为列

PostgreSQL 将行动态转置为列

在 Spark SQL (pyspark) 中将行转置为列