Faire pivoter une table dans SQL Server

Cet article explique comment faire pivoter une table dans SQL Server.

Version du produit d’origine : SQL Server
Numéro de la base de connaissances d’origine : 175574

Résumé

Cet article explique comment faire pivoter une table SQL Server. Supposons que vous disposez d’une table nommée QTRSALES. La table contient les colonnes YEAR, QUARTERet AMOUNT avec les données au format suivant.

Remarque

Il n’y a pas de ligne pour le quatrième trimestre de 1996 :

Year Trimestre Montant
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

Supposons maintenant que vous souhaitez faire pivoter la table afin de pouvoir voir les données au format suivant :

YEAR Q1 T2 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 requête que vous utiliseriez pour faire pivoter la table figure dans la section suivante de cet article.

Exemple de requête pour faire pivoter la table

Voici la requête que vous utiliseriez pour faire pivoter la table :

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

Requête de tables volumineuses

Pour les tables volumineuses, cette requête sera plus rapide :

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

Référence

FROM - Utilisation de PIVOT et UNPIVOT