Heim >Datenbank >MySQL-Tutorial >Wie führe ich dynamisches Pivotieren für mehrere Spalten in SQL Server durch?
Dynamisches Pivotieren über mehrere Spalten in SQL Server
Problem:
In SQL Server Wie können wir einen dynamischen Pivot über mehrere Spalten in einer Tabelle durchführen, wobei sich die Spaltennamen in ändern können? Zukunft?
Lösung:
Um eine dynamische Pivotierung mit mehreren Spalten zu erreichen, befolgen Sie diese Schritte:
1. Entpivotieren Sie die Daten:
select id, col = cast(t_year as varchar(4))+'_'+t_type+'_'+col, value from ATM_TRANSACTIONS t cross apply ( select 'total', total union all select 'volume', volume ) c (col, value);
2. PIVOT-Funktion anwenden:
select ID, [2008_A_total], [2008_A_volume], [2008_B_total], [2008_B_volume], [2008_C_total], [2008_C_volume], [2009_A_total], [2009_A_volume] from ( select id, col = cast(t_year as varchar(4))+'_'+t_type+'_'+col, value from ATM_TRANSACTIONS t cross apply ( select 'total', total union all select 'volume', volume ) c (col, value) ) d pivot ( max(value) for col in ([2008_A_total], [2008_A_volume], [2008_B_total], [2008_B_volume], [2008_C_total], [2008_C_volume], [2009_A_total], [2009_A_volume]) ) piv;
3. In dynamisches SQL konvertieren:
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT ',' + QUOTENAME(cast(t_year as varchar(4))+'_'+t_type+'_'+col) from ATM_TRANSACTIONS t cross apply ( select 'total', 1 union all select 'volume', 2 ) c (col, so) group by col, so, T_TYPE, T_YEAR order by T_YEAR, T_TYPE, so FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT id,' + @cols + ' from ( select id, col = cast(t_year as varchar(4))+''_''+t_type+''_''+col, value from ATM_TRANSACTIONS t cross apply ( select ''total'', total union all select ''volume'', volume ) c (col, value) ) x pivot ( max(value) for col in (' + @cols + ') ) p ' execute sp_executesql @query;
Ausgabe:
Dadurch wird ein Pivot-Ergebnis mit den angegebenen Spalten generiert. Die Ergebnisse können je nach den Daten in Ihrer Tabelle variieren.
Das obige ist der detaillierte Inhalt vonWie führe ich dynamisches Pivotieren für mehrere Spalten in SQL Server durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!