Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine vollständige Tabelle in MS SQL mit UNPIVOT und PIVOT transponieren?

Wie kann ich eine vollständige Tabelle in MS SQL mit UNPIVOT und PIVOT transponieren?

Susan Sarandon
Susan SarandonOriginal
2025-01-14 20:57:44321Durchsuche

How Can I Transpose a Full Table in MS SQL Using UNPIVOT and PIVOT?

MS SQL Server: Vollständige Tabellentransposition mit UNPIVOT und PIVOT

Das Transponieren einer Tabelle mit mehreren Spalten in MS SQL Server erfordert einen kombinierten Ansatz unter Verwendung der Funktionen UNPIVOT und PIVOT. UNPIVOT formt mehrere Spalten in Zeilen um, während PIVOT Zeilenwerte wieder in Spalten umwandelt.

Schritt-für-Schritt-Anleitung:

  1. Datenentpivotierung:

    Dieser Schritt wandelt Ihre Spaltendaten in Zeilen um. Ersetzen Sie yourtable, A, B, value und col durch Ihre tatsächlichen Tabellen- und Spaltennamen.

    <code class="language-sql">SELECT day, col, value
    FROM yourtable
    UNPIVOT
    (
        value
        FOR col IN (A, B)
    ) unpiv</code>
  2. Daten-Pivotierung:

    Hier werden die Zeilendaten wieder in Spalten umgewandelt. Passen Sie Mon, Tue, Wed, Thu, Fri an Ihre spezifischen Spaltennamen an (in diesem Beispiel die Wochentage).

    <code class="language-sql">SELECT *
    FROM (SELECT * FROM ...) src  -- Replace ... with the UNPIVOT query from step 1
    PIVOT
    (
        MAX(value)
        FOR day IN (Mon, Tue, Wed, Thu, Fri)
    ) piv</code>
  3. Integration in bestehende Abfragen:

    Um Daten innerhalb einer vorhandenen Abfrage zu transponieren, integrieren Sie die Operationen UNPIVOT und PIVOT:

    <code class="language-sql">SELECT *
    FROM
    (
        SELECT LEFT(DATENAME(dw, datetime), 3) AS DateWeek,
               col,
               value
        FROM DataTable
        CROSS APPLY
        (
            VALUES ('A', ACalls), ('B', BCalls)
        ) c (col, value)
    ) src
    PIVOT
    (
        SUM(value)
        FOR DateWeek IN (Mon, Tue, Wed, Thu, Fri)
    ) piv</code>

Beispiel für die Verwendung von PIVOT und CROSS APPLY (SQL Server 2008 und höher):

Dieses Beispiel nutzt CROSS APPLY für eine prägnantere Lösung.

<code class="language-sql">SELECT day, col, value
FROM yourtable
CROSS APPLY
(
    VALUES ('A', ACalls), ('B', BCalls)
) c (col, value)
PIVOT
(
    MAX(value)
    FOR day IN (Mon, Tue, Wed, Thu, Fri)
) piv</code>

Wichtige Überlegungen:

  • In der Spalte col im Ergebnis ohne Pivot werden die ursprünglichen Spaltennamen angezeigt.
  • Die MAX()-Funktion kann je nach Ihren Datenanforderungen durch andere Aggregatfunktionen (wie SUM(), AVG() usw.) ersetzt werden.

Dieser umfassende Leitfaden zeigt, wie man ganze Tabellen in MS SQL Server effektiv transponiert und bietet Flexibilität und Anpassungsfähigkeit für verschiedene Datenmanipulationsszenarien.

Das obige ist der detaillierte Inhalt vonWie kann ich eine vollständige Tabelle in MS SQL mit UNPIVOT und PIVOT transponieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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