Leggere in inglese

Condividi tramite


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 di SQL Server. Si supponga di avere una tabella denominata QTRSALES. La tabella contiene le colonne YEAR, QUARTERe AMOUNT con i dati nel formato seguente.

Nota

Non esiste alcuna riga per il quarto trimestre del 1996:

Anno Trimestrale Periodo
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 che sia possibile visualizzare i dati nel formato seguente:

YEAR Q1 Q2 D3 D4
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 che si userà per ruotare la tabella si trova nella sezione successiva di questo articolo.

Query di esempio per ruotare la tabella

Ecco la query che si userà 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

Riferimenti

FROM - Uso di PIVOT e UNPIVOT