Heim > Datenbank > MySQL-Tutorial > Wie kann ich Zeilen in SQL ohne Aggregation in Spalten umwandeln?

Wie kann ich Zeilen in SQL ohne Aggregation in Spalten umwandeln?

Mary-Kate Olsen
Freigeben: 2025-01-08 00:21:41
Original
714 Leute haben es durchsucht

How to Pivot Rows to Columns in SQL Without Aggregation?

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:

  • TEST_NAME
  • SBNO
  • VAL

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>
Nach dem Login kopieren
<code>目标输出

╔══════════════════════════╗
║ SBNO Test1 Test2   Test3 ║
╠══════════════════════════╣
║ 1    0.304  2.3    PASS  ║
║ 2    0.31   2.5    PASS  ║
║ 3    0.306  2.4    NULL  ║
╚══════════════════════════╝</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage