Partager via


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 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. Le tableau comporte les colonnes YEAR, QUARTERet AMOUNT avec les données au format suivant.

Note

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

Année Quarter (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 que vous puissiez voir les données au format suivant :

YEAR T1 T2 T3 T4
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 se trouve 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 pour les 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 des opérateurs PIVOT et UNPIVOT