sql >> Databasteknik >  >> RDS >> Sqlserver

Lagring av dynamiskt pivotresultat i en tillfällig tabell i SQL Server

Om du använder apply så varför behöver du ytterligare samma logik i PIVOT (dvs Channel + CONVERT(Varchar(4), Year) ) som redan är tillgängligt i apply .

Så jag skulle använda Value istället i PIVOT :

. . . 
Pivot (sum([Payments]) For [Value] in ([HV2012],[HV2013],[HV2014],[NL2012]) ) p,

Så, din uppdaterade Dynamic SQL skulle vara :

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

Jag har inte gjort några ändringar eftersom det finns många korrigeringar som måste göras innan exekvering.




  1. Fel under Django Körande migrering:django.db.utils.OperationalError:(2013, 'Förlorad anslutning till MySQL-server under förfrågan')

  2. Beräkna MEDEL från 2 kolumner för varje rad i SQL

  3. Hur säkerhetskopierar jag MySQL-databas i PHP?

  4. Visual Studio - Det gick inte att länka MySql-databastabellen till DataSet