Drehen einer Tabelle in SQL Server

In diesem Artikel wird beschrieben, wie Sie eine Tabelle in SQL Server rotieren.

Ursprüngliche Produktversion: SQL Server
Ursprüngliche KB-Nummer: 175574

Zusammenfassung

In diesem Artikel wird beschrieben, wie Sie eine SQL Server Tabelle rotieren. Angenommen, Sie verfügen über eine Tabelle mit dem Namen QTRSALES. Die Tabelle enthält die Spalten YEAR, QUARTERund AMOUNT mit den Daten im folgenden Format.

Hinweis

Für das vierte Quartal 1996 gibt es keine Zeile:

Jahr Quartal Betrag
1995 1 125,000.90
1995 2 136,000.75
1995 3 212,000.34
1995 4 328,000.82
1996 3 728,000.35
1996 2 422,000.13
1996 1 328,000.82

Angenommen, Sie möchten die Tabelle rotieren, damit Sie die Daten im folgenden Format sehen können:

YEAR Q1 Q2 Q3 Q4
1995 125,000.90 136,000.75 212,000.34 328,000.82
1996 328,000.82 422,000.13 728,000.35 0.00

Die Abfrage, die Sie zum Rotieren der Tabelle verwenden würden, finden Sie im nächsten Abschnitt dieses Artikels.

Beispielabfrage zum Rotieren der Tabelle

Dies ist die Abfrage, die Sie zum Rotieren der Tabelle verwenden würden:

SELECT YEAR,
Q1= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 1 AND YEAR =
Q.YEAR),0),
Q2= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 2 AND YEAR =
Q.YEAR),0),
Q3= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 3 AND YEAR =
Q.YEAR),0),
Q4= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 4 AND YEAR =
Q.YEAR),0)
FROM QTRSALES Q
GROUP BY YEAR

Abfrage für große Tabellen

Bei großen Tabellen ist diese Abfrage schneller:

SELECT YEAR,
SUM(CASE quarter WHEN 1 THEN amount ELSE 0 END) AS Q1,
SUM(CASE quarter WHEN 2 THEN amount ELSE 0 END) AS Q2,
SUM(CASE quarter WHEN 3 THEN amount ELSE 0 END) AS Q3,
SUM(CASE quarter WHEN 4 THEN amount ELSE 0 END) AS Q4
FROM qtrsales q
GROUP BY YEAR

Referenz

FROM: Verwenden von PIVOT und UNPIVOT