Beispiel
Die PIVOT-Klausel kann in SQL Server (Transact-SQL) verwendet werden.
Schauen wir uns das an Ein Beispiel: Wenn wir eine Mitarbeitertabelle hätten, die die folgenden Daten enthält:
Mitarbeiternummer | Nachname | Vorname | Gehalt | dept_id |
---|---|---|---|---|
12009 | Sutherland | Barbara | 54000 | 45 |
34974 | Yates | Fred | 80000 | 45 |
34987 | Erickson | Neil | 42000 | 45 |
45001 | Parker | Sally | 57500 | 30 |
75623 | Gates | Steve | 65000 | 30 |
Und wir haben die folgende SQL-Anweisung ausgeführt, die eine Kreuztabelle erstellt bei Abfrage mit der PIVOT-Klausel:
Es würde das folgende Ergebnis zurückgegeben:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |
In diesem Beispiel wird eine Pivot-Tabelle erstellt, in der das Gesamtgehalt für dept_id 30 und dept_id 45 angezeigt wird. Die Ergebnisse werden in einer Zeile angezeigt, wobei die beiden Abteilungen angezeigt werden jeweils in einer eigenen Spalte.
Lassen Sie uns nun die PIVOT-Klausel auseinander brechen und erklären, wie sie funktioniert.
Geben Sie Spalten in Kreuztabellenergebnissen an
Zunächst möchten wir angeben, welche Felder in unsere Kreuztabellenergebnisse aufgenommen werden sollen. In diesem Beispiel möchten wir den Literalwert „TotalSalary“ als erste Spalte in die Pivot-Tabelle aufnehmen. Und wir möchten eine Spalte für dept_id 30 und eine zweite Spalte für dept_id 45 erstellen. Dies gibt uns 3 Spalten in unserer Pivot-Tabelle.
SELECT "TotalSalary" AS TotalSalaryByDept, ,
Geben Sie die Quelle an Tabellendaten
Als Nächstes müssen wir eine SELECT-Anweisung angeben, die die Quelldaten für die Pivot-Tabelle zurückgibt.
In diesem Beispiel möchten wir die Werte für dept_id und Gehalt von zurückgeben Die Mitarbeitertabelle:
(SELECT dept_id, salary FROM employees) AS SourceTable
Sie müssen einen Alias für die Quellabfrage angeben. In diesem Beispiel haben wir die Abfrage als SourceTable aliasisiert.
Aggregatfunktion angeben
Als Nächstes müssen Sie angeben, welche Aggregatfunktion beim Erstellen unserer Kreuztabellenabfrage verwendet werden soll. Sie können jedes Aggregat wie SUM-, COUNT-, MIN-, MAX- oder AVG-Funktionen verwenden.
In diesem Beispiel verwenden wir die SUMME-Funktion. Dies summiert die Gehaltswerte:
PIVOT(SUM(salary)
Pivot-Werte angeben
Schließlich müssen wir angeben, welche Pivot-Werte in unsere Ergebnisse aufgenommen werden sollen . Diese werden als Spaltenüberschriften in unserer Kreuztabellenabfrage verwendet.
In diesem Beispiel werden nur die dept_id-Werte 30 und 45 zurückgegeben. Diese Werte werden zu unseren Spaltenüberschriften in unserem Pivot Tabelle. Beachten Sie außerdem, dass diese Werte eine endliche Liste der dept_id-Werte sind und nicht unbedingt alle möglichen Werte enthalten.
FOR dept_id IN (, )
Wenn wir nun alles zusammenfügen, Wir erhalten die folgende Pivot-Tabelle:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |