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 initiale :   175574

Synthèse

Cet article explique comment faire pivoter une table SQL Server. Supposons que vous avez un tableau nommé QTRSALES . Le tableau contient les colonnes YEAR , QUARTER et AMOUNT avec les données au format suivant.

Notes

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

Year Trimestre Montant
1995 125 000,90
1995 136 000,75
1995 212 000,34
1995 4 328 000,82
1996 728 000,35
1996 422 000,13
1996 328 000,82

À présent, supposons que vous vouliez faire pivoter le tableau de sorte que vous puissiez voir les données dans le format suivant :

YEAR T1 2ème T3 4e
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 allez utiliser pour faire pivoter le tableau est la section suivante de cet article.

Exemple de requête pour faire pivoter le tableau

Voici la requête que vous utiliserez pour faire pivoter le tableau :

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 :

year=q.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

DE-utilisation de tableau croisé dynamique et de tableau croisé dynamique