Résumé
Cet article explique comment faire pivoter une table SQL Server. Imaginons que vous ayez une table nommée QTRSALES. La table contient les colonnes année, trimestre et montant avec les données au format suivant (Notez qu’il n’existe aucune ligne pour le quatrième trimestre de 1996) : Year Quarter Amount ------------------------------- 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 À présent, imaginons que vous souhaitiez faire pivoter le tableau de sorte que vous puissiez voir les données dans le format suivant : YEAR Q1 Q2 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 le tableau figure dans la section suivante de cet article.
Exemple de requête pour faire pivoter le tableau
Voici la requête que vous utiliseriez 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 grandes tables
Pour les grands tableaux, 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 Q4FROM qtrsales qGROUP BY year