Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
, QUARTER
e AMOUNT
con i dati nel formato seguente.
Note
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