SQL Server 中的简单转置



我想在SQL Server中进行一个简单的转置,并显示1行和多列。我已经查看了枢轴和取消枢轴,对于这种情况来说,它们似乎太复杂了。我正在运行一个简单的SQL查询来获取行:

select name 
from sys.databases 
where name like '%trn%'

示例数据:

prpc_trn
prpc_trn_arc
prpc_trn_IntegrationAuditDetails
prpc_trn_IntegrationAuditDetailsArchive
prpc_trn_Lumley
prpc_trn_PerformanceLoggingDetails
prpc_trn_PerformanceLoggingDetailsArchive
prpc_trn_prHistory
prpc_trn_prHistoryArchive
prpccpmi_trn
prpcref_trn

根据我对你问题的理解,这只能通过 PIVOT 来实现。但是仅使用 PIVOT 可能不是最好的,因为列是动态的。

基于下面的文章,我认为将XML与PIVOT一起使用比仅使用PIVOT更好。

我试图根据您的要求根据本文编写查询:

declare @cols as nvarchar(max), @query as nvarchar(max);
set @cols = stuff((select distinct ',' + quotename(c.[name])
            from   sys.databases c
            where name like '%trx%'
            for xml path(''), type).value('.', 'nvarchar(max)')
            , 1, 1, '')
set @query = 'select *  from (
  select name from sys.databases ) x pivot (max(name) for name in (' + @cols + ')) p '
execute (@query)

这可以通过使用更好的列名值来改进。上面的查询将使用表名本身作为列名。

最新更新