FROM – Verwenden von PIVOT und UNPIVOT

  • 14.10.2019
  • 5 Minuten zum Lesen
    • V
    • c
    • M
    • i
    • M
    • +7

Gilt für: SQL Server (alle unterstützten Versionen) Azure SQL-Datenbank Verwaltete Azure SQL-Instanz Azure Synapse Analytics Paralleles Data Warehouse

Sie können die relationalen Operatoren PIVOT und UNPIVOT verwenden Ändern Sie einen Ausdruck mit Tabellenwert in eine andere Tabelle. PIVOT dreht einen Ausdruck mit Tabellenwert, indem die eindeutigen Werte aus einer Spalte im Ausdruck in mehrere Spalten in der Ausgabe umgewandelt werden. Und PIVOT führt Aggregationen aus, bei denen sie für alle verbleibenden Spaltenwerte erforderlich sind, die in der endgültigen Ausgabe gewünscht werden. UNPIVOT führt die entgegengesetzte Operation aus zu PIVOT durch Drehen von Spalten eines Ausdrucks mit Tabellenwert in Spaltenwerte.

Die Syntax für PIVOT ist einfacher und besser lesbar als die sonst möglicherweise vorhandene Syntax angegeben in einer komplexen Reihe von SELECT...CASE -Anweisungen. Eine vollständige Beschreibung der Syntax für PIVOT finden Sie unter FROM (Transact-SQL).

Syntax

Die folgende Syntax fasst die Verwendung des Operators PIVOT zusammen.

Anmerkungen

Die Spaltenkennungen in der Klausel UNPIVOT folgen der Katalogkollatierung. Bei SQL-Datenbanken lautet die Kollatierung immer SQL_Latin1_General_CP1_CI_AS. Bei SQL Server teilweise enthalten Datenbanken lautet die Sortierung immer Latin1_General_100_CI_AS_KS_WS_SC. Wenn die Spalte kombiniert ist Wenn Sie mit anderen Spalten arbeiten, ist eine Sortierklausel (COLLATE DATABASE_DEFAULT) erforderlich, um Konflikte zu vermeiden.

Grundlegendes PIVOT-Beispiel

Das folgende Codebeispiel erzeugt eine zweispaltige Tabelle mit vier Zeilen.

Hier ist die Ergebnismenge.

Mit drei DaysToManufacture sind keine Produkte definiert.

Der folgende Code zeigt dasselbe Ergebnis an, das so gedreht ist, dass die DaysToManufacture -Werte werden zu Spaltenüberschriften. Eine Spalte wird für drei Tage bereitgestellt, obwohl die Ergebnisse NULL sind.

Hier ist die Ergebnismenge

Komplexes PIVOT-Beispiel

Ein häufiges Szenario, in dem PIVOT nützlich sein kann, ist Wenn Sie Kreuztabellenberichte erstellen möchten, um eine Zusammenfassung der Daten zu erhalten. Angenommen, Sie möchten die Tabelle PurchaseOrderHeader in der Beispieldatenbank AdventureWorks2014 abfragen, um die Anzahl der Bestellungen bestimmter Mitarbeiter zu ermitteln. Die folgende Abfrage enthält diesen Bericht, sortiert nach Hersteller.

Hier ist eine Teilergebnismenge.

Die von dieser Unterauswahl zurückgegebenen Ergebnisse Anweisungen werden in der Spalte EmployeeID gedreht.

Die vom wird zu Feldern in der endgültigen Ergebnismenge. Daher gibt es für jede in der Pivot-Klausel angegebene EmployeeID -Nummer eine Spalte: in diesem Fall Mitarbeiter 250, 251, 256, 257 und 260 div id = „c36dcf6b3b“> -Spalte dient als Wertespalte, anhand derer die in der endgültigen Ausgabe zurückgegebenen Spalten, die als Gruppierungsspalten bezeichnet werden, gruppiert werden. In diesem Fall werden die Gruppierungsspalten durch die COUNT -Funktion. Beachten Sie, dass eine Warnmeldung angezeigt wird, die angibt, dass Nullwerte in der Spalte PurchaseOrderID bei der Berechnung der COUNT für jeden Mitarbeiter.

Wichtig

Wenn Aggregatfunktionen mit PIVOT verwendet werden Das Vorhandensein von Nullwerten in der Wertespalte wird bei der Berechnung einer Aggregation nicht berücksichtigt.

UNPIVOT-Beispiel

UNPIVOT führt fast die umgekehrte Operation von PIVOT aus, indem Spalten in Zeilen gedreht werden. Angenommen, die im vorherigen Beispiel erstellte Tabelle wird in der Datenbank als pvt gespeichert, und Sie möchten die Spaltenkennungen Emp1, Emp2, Emp3, Emp4 und Emp5 in Zeilenwerte, die einem bestimmten Anbieter entsprechen. Daher müssen Sie zwei zusätzliche Spalten identifizieren.Die Spalte, die die Spaltenwerte enthält, die Sie „drehen“ (Emp1, Emp2, …), heißt Employee und die Spalte, die die Werte enthält, die derzeit unter den zu drehenden Spalten vorhanden sind, heißt Orders. Diese Spalten entsprechen der Spalte pivot_column und value_column In der Transact-SQL-Definition. Hier ist die Abfrage.

Hier ist eine Teilergebnismenge.

Beachten Sie, dass UNPIVOT ist nicht die genaue Umkehrung von PIVOT. PIVOT führt eine Aggregation durch und führt mögliche mehrere Zeilen in der Ausgabe zu einer einzigen Zeile zusammen. UNPIVOT reproduziert das ursprüngliche Ausdrucksergebnis mit Tabellenwert nicht, da Zeilen zusammengeführt wurden. Außerdem verschwinden Nullwerte in der Eingabe von UNPIVOT Wenn die Werte verschwinden, wird angezeigt, dass möglicherweise vor der Operation PIVOT ursprüngliche Nullwerte in der Eingabe vorhanden waren.

Die Sales.vSalesPersonSalesByFiscalYears in der AdventureWorks2012-Beispieldatenbank verwendet PIVOT, um den Gesamtumsatz für jeden Verkäufer für jedes Geschäftsjahr zurückzugeben. Um die Ansicht in SQL Server Management Studio zu skripten Suchen Sie im Objekt-Explorer die Ansicht im Ordner „Ansichten“ für die AdventureWorks2012-Datenbank. Klicken Sie mit der rechten Maustaste auf den Namen der Ansicht, und wählen Sie dann „Skriptansicht“ aus.

Siehe auch

FROM (Transact -SQL)
CASE (Transact-SQL)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.