Ruotare una tabella in SQL Server

Questo articolo descrive come ruotare una tabella in SQL Server.

Versione originale del prodotto: SQL Server
Numero KB originale: 175574

Riepilogo

Questo articolo descrive come ruotare una tabella SQL Server. Si supponga di avere una tabella denominata QTRSALES. La tabella include le colonne YEAR, QUARTERe AMOUNT con i dati nel formato seguente.

Nota

Non esiste alcuna riga per il quarto trimestre del 1996:

Anno Quarto Quantità
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

Si supponga ora di voler ruotare la tabella in modo da poter visualizzare i dati nel formato seguente:

ANNO 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

La query da usare per ruotare la tabella è disponibile nella sezione successiva di questo articolo.

Query di esempio per ruotare la tabella

Ecco la query che si userebbe per ruotare la tabella:

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

Query per tabelle di grandi dimensioni

Per le tabelle di grandi dimensioni, questa query sarà più veloce:

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

Riferimento

FROM - Uso di PIVOT e UNPIVOT