SQL-Zeilen-zu-Spalten-Operation ohne Aggregatfunktion
In der Datenverarbeitung ist die Konvertierung von Zeilendaten in Spaltendaten (Zeile in Spalte) ein häufiger Bedarf, was besonders nützlich ist, um Daten basierend auf mehreren Attributen zusammenzufassen oder zu analysieren.
Die PIVOT-Funktion in SQL kann Zeilen-zu-Spalten-Operationen implementieren. Allerdings muss die PIVOT-Funktion häufig mit einer Aggregatfunktion (z. B. MAX oder MIN) kombiniert werden, um die geschwenkten Werte zu verarbeiten. In manchen Fällen möchten wir jedoch eine einfache Werte-Pivotierung ohne Aggregationsoperationen durchführen.
Betrachten Sie beispielsweise eine Tabelle mit dem Namen „TEST“ mit den folgenden Spalten:
VAL-Spalten enthalten verschiedene Datentypen (Ganzzahl, Dezimalzahl oder Varchar). Das Ziel besteht darin, die Spalte TEST_NAME in drei separate Spalten (Test1, Test2 und Test3) ohne Aggregation umzuwandeln:
<code>源表 ╔═══════════╦══════╦═══════╗ ║ TEST_NAME ║ SBNO ║ VAL ║ ╠═══════════╬══════╬═══════╣ ║ Test1 ║ 1 ║ 0.304 ║ ║ Test1 ║ 2 ║ 0.31 ║ ║ Test1 ║ 3 ║ 0.306 ║ ║ Test2 ║ 1 ║ 2.3 ║ ║ Test2 ║ 2 ║ 2.5 ║ ║ Test2 ║ 3 ║ 2.4 ║ ║ Test3 ║ 1 ║ PASS ║ ║ Test3 ║ 2 ║ PASS ║ ╚═══════════╩══════╩═══════╝</code>
<code>目标输出 ╔══════════════════════════╗ ║ SBNO Test1 Test2 Test3 ║ ╠══════════════════════════╣ ║ 1 0.304 2.3 PASS ║ ║ 2 0.31 2.5 PASS ║ ║ 3 0.306 2.4 NULL ║ ╚══════════════════════════╝</code>
Um dies zu erreichen, ohne irgendwelche Aggregatfunktionen zu verwenden, können wir dynamisches SQL verwenden:
<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT distinct ',' + QUOTENAME(TEST_NAME) from yourtable FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT sbno,' + @cols + ' from ( select test_name, sbno, val from yourtable ) x pivot ( max(val) for test_name in (' + @cols + ') ) p ' execute(@query)</code>
Diese Abfrage generiert eine dynamische SQL-Anweisung, die alle eindeutigen Werte von TEST_NAME als Spaltennamen enthält. Anschließend verwendet es die PIVOT-Funktion, um die Zeilendaten in Spalten umzuwandeln, ohne eine Aggregation anzuwenden.
Das Ausführen dieses SQL erzeugt die gewünschte Ausgabe, nämlich eine Tabelle mit den Pivot-Spalten Test1, Test2 und Test3, die die entsprechenden VAL-Werte aus der Originaltabelle enthält.
Diese überarbeitete Ausgabe behält die ursprüngliche Bedeutung bei, verwendet jedoch leicht andere Formulierungen und Satzstrukturen. Die technischen Details bleiben unverändert.
Das obige ist der detaillierte Inhalt vonWie kann ich Zeilen in SQL ohne Aggregation in Spalten umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!