Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Съхраняване на динамичен Pivot резултат във временна таблица в SQL Server

Ако използвате 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
 

Не съм правил промени, тъй като трябва да се направят много корекции преди изпълнението.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Заявка, за да получите само числа от низ

  2. Получаване на уникален идентификатор на база данни за SQL Server 2005 и по-нови версии

  3. Извикване на съхранена процедура с върната стойност

  4. sp_MSforeachdb:включва само резултати от бази данни с резултати

  5. Команда за заспиване в T-SQL?