您可以使用PIVOT
。如果你知道你必须改变的列数,那么你可以使用一个静态版本:
select *
from
(
select RptLOB1 RptLOB1, RPTLOB2 RPTLOB2, Correlation
from yourtable
union all
select RPTLOB2, RptLOB1, Correlation
from yourtable
union all
select distinct RptLOB1, RptLOB1, 1.0
from yourtable
) x
pivot
(
max(Correlation)
for RPTLOB2 in ([AE], [Bail], [Commercial])
) p;
如果你有一个未知的数字值相关联的,那么你将要使用动态版:
DECLARE @query AS NVARCHAR(MAX),
@colsPivot as NVARCHAR(MAX)
select @colsPivot = STUFF((SELECT distinct ','
+ quotename(RptLOB1)
from yourtable t
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query
= 'select RptLOB1, '[email protected]+ '
from
(
select RptLOB1 RptLOB1, RPTLOB2 RPTLOB2, Correlation
from yourtable
union all
select RPTLOB2, RptLOB1, Correlation
from yourtable
union all
select distinct RptLOB1, RptLOB1, 1.0
from yourtable
) x
pivot
(
max(Correlation)
for RPTLOB2 in ('+ @colspivot +')
) p'
exec(@query)
编辑 - 根据您的意见,如果你想在另一个RO列标题W,那么你可以使用以下命令:
DECLARE @query AS NVARCHAR(MAX),
@colsPivot as NVARCHAR(MAX),
@colsRow as NVARCHAR(MAX),
@colsConverted as NVARCHAR(MAX)
select @colsPivot = STUFF((SELECT distinct ','
+ quotename(RptLOB1)
from yourtable t
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
select @colsRow = STUFF((SELECT distinct ', '''
+ RptLOB1 + ''' as ' + RptLOB1
from yourtable t
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
select @colsConverted
= STUFF((SELECT distinct ', CAST('
+ quotename(RptLOB1)
+ ' as varchar(50))'
from yourtable t
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query
= 'select ''RptLOB1'' as RptLOB1,
'+ @colsRow + '
union all
select RptLOB1, '+ @colsConverted+ '
from
(
select RptLOB1 RptLOB1, RPTLOB2 RPTLOB2, Correlation
from yourtable
union all
select RPTLOB2, RptLOB1, Correlation
from yourtable
union all
select distinct RptLOB1, RptLOB1, 1.0
from yourtable
) x
pivot
(
max(Correlation)
for RPTLOB2 in ('+ @colspivot +')
) p'
exec(@query)
@OMGPonies嗯,我能想到的是旋转行值的唯一的事来创建最上面一行,但如果我这样做行值变列标题,这不是我想要的。我不知道如何处理是不会发生的,我可以创建矩阵... – Kristina
我认为这将是非常困难的使用纯SQL。我建议尝试其他工具,如R编程语言。 – jrara
如果您不希望列成为列标题,那么您遇到了数据类型不匹配的问题。 – podiluska