Freigeben über


Drehen einer Tabelle in SQL Server

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

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

Zusammenfassung

In diesem Artikel wird beschrieben, wie Sie eine SQL Server-Tabelle drehen. Angenommen, Sie haben eine Tabelle mit dem Namen QTRSALES. Die Tabelle enthält die Spalten YEARund QUARTERAMOUNT die Daten im folgenden Format.

Notiz

Es gibt keine Zeile für das vierte Quartal 1996:

Jahr Quarter Dauer
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 drehen, damit die Daten im folgenden Format angezeigt werden:

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 Drehen der Tabelle verwenden würden, befindet sich im nächsten Abschnitt dieses Artikels.

Beispielabfrage zum Drehen der Tabelle

Dies ist die Abfrage, die Sie zum Drehen 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

Verweis

FROM: Verwenden von PIVOT und UNPIVOT