apply
を使用している場合 PIVOT
でさらに同じロジックが必要な理由 (つまり、Channel + CONVERT(Varchar(4), Year)
) apply
で既に利用可能です .
だから、私は Value
を使用します 代わりに PIVOT
で :
. . .
Pivot (sum([Payments]) For [Value] in ([HV2012],[HV2013],[HV2014],[NL2012]) ) p,
プレ>
それで、更新された Dynamic SQL
Declare @SQL varchar(max) = ' if object_id(''tempdb..##TempTable'') is not null begin drop table ##TempTable end create table ##TempTable([Id] int null, ' + Stuff((Select Distinct ','+QuoteName(Channel + CONVERT(Varchar(4), Year)) + ' Varchar(20) null' From [dbo].MyTable Order By 1 For XML Path('')),1,1,'')+ ') INSERT INTO ##TempTable Select * From ( Select A.ID, A.Payments ,B.* From [dbo].MyTable a Cross Apply ( values ( Channel + CONVERT(Varchar(4), Year) )) B ([Value]) ) S Pivot (sum([Payments]) For [Value] in (' + Stuff((Select Distinct ','+QuoteName(Channel + CONVERT(Varchar(4), Year)) From #tm Order By 1 For XML Path('')),1,1,'') + ') ) p' print @sql Exec(@SQL) SELECT * FROM ##TempTable
プレ>実行前に多くの修正が必要なため、変更は行っていません。