我想在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)
这可以通过使用更好的列名值来改进。上面的查询将使用表名本身作为列名。