Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
, QUARTER
et 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