Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przechowywanie dynamicznego wyniku Pivot w tabeli tymczasowej w SQL Server

Jeśli używasz apply to dlaczego potrzebujesz tej samej logiki w PIVOT (np. Channel + CONVERT(Varchar(4), Year) ), który jest już dostępny w apply .

Więc użyłbym Value zamiast tego w PIVOT :

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

Zaktualizowany Dynamic SQL byłoby :

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

Nie wprowadziłem żadnych zmian, ponieważ przed wykonaniem należy wprowadzić wiele poprawek.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zastąpić domyślną alfabetyczną wartość ORDER BY za pomocą UNION z 2+ tabel?

  2. Pakiet SSIS działa 500 razy dłużej na jednym serwerze

  3. Jaki jest najlepszy sposób na zbiorcze wstawianie bazy danych z c#?

  4. Jak naprawić błąd „nazwa profilu jest nieprawidłowa” podczas aktualizowania profilu poczty bazy danych w programie SQL Server (T-SQL)

  5. Jak dodać logowanie Sysadmin do SQL Server?