यदि आप 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
मैंने कोई बदलाव नहीं किया है क्योंकि निष्पादन से पहले कई सुधार किए जाने की आवश्यकता है।