Heim >Datenbank >MySQL-Tutorial >Wie kann man Spalten und Zeilen in SQL einfach transponieren?
Einfache Möglichkeit, SQL-Zeilen und -Spalten zu konvertieren
In SQL ist es eine häufige Anforderung, Zeilen- und Spaltendaten zu konvertieren, um ein praktischeres Datenformat zu erhalten. Obwohl die PIVOT-Funktion kompliziert aussieht, gibt es tatsächlich einfachere Alternativen.
Verwenden Sie UNION ALL, Aggregatfunktionen und CASE-Anweisungen
Wenn Sie die PIVOT-Funktion nicht verwenden können, können Sie eine Kombination aus UNION ALL, Aggregatfunktionen und CASE-Anweisungen verwenden:
<code class="language-sql">select name, sum(case when color = 'Red' then value else 0 end) Red, sum(case when color = 'Green' then value else 0 end) Green, sum(case when color = 'Blue' then value else 0 end) Blue from ( select color, Paul value, 'Paul' name from yourTable union all select color, John value, 'John' name from yourTable union all select color, Tim value, 'Tim' name from yourTable union all select color, Eric value, 'Eric' name from yourTable ) src group by name</code>
Statische UNPIVOT- und PIVOT-Methoden
Wenn der zu konvertierende Spaltenwert bekannt ist, können Sie die Funktionen UNPIVOT und PIVOT verwenden:
<code class="language-sql">select name, [Red], [Green], [Blue] from ( select color, name, value from yourtable unpivot ( value for name in (Paul, John, Tim, Eric) ) unpiv ) src pivot ( sum(value) for color in ([Red], [Green], [Blue]) ) piv</code>
Dynamische PIVOT-Methode
Für eine unbekannte Anzahl von Spalten und Farben kann dynamisches SQL verwendet werden:
<code class="language-sql">DECLARE @colsUnpivot AS NVARCHAR(MAX), @query AS NVARCHAR(MAX), @colsPivot as NVARCHAR(MAX) select @colsUnpivot = stuff((select ','+quotename(C.name) from sys.columns as C where C.object_id = object_id('yourtable') and C.name <> 'color' for xml path('')), 1, 1, '') select @colsPivot = STUFF((SELECT ',' + quotename(color) from yourtable t FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'select name, '+@colsPivot+' from ( select color, name, value from yourtable unpivot ( value for name in ('+@colsUnpivot+') ) unpiv ) src pivot ( sum(value) for color in ('+@colsPivot+') ) piv' exec(@query)</code>
Das obige ist der detaillierte Inhalt vonWie kann man Spalten und Zeilen in SQL einfach transponieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!