Pivoter des lignes en colonnes
Fait partie de la section Au-delà des bases du Journey SQL de Coddy — leçon 14 sur 27.
Combinez l'agrégation conditionnelle avec GROUP BY pour transformer des lignes en colonnes. C'est la version SQL d'un tableau croisé dynamique de tableur.
Supposons que sales contienne des lignes comme (month, product, units). Pour voir une ligne par mois avec une colonne par produit :
SELECT
month,
SUM(CASE WHEN product = 'A' THEN units ELSE 0 END) AS product_a,
SUM(CASE WHEN product = 'B' THEN units ELSE 0 END) AS product_b
FROM sales
GROUP BY monthLe regroupement GROUP BY que chaque SUM(CASE …) voit correspond aux lignes d'un mois ; le CASE sélectionne la tranche pour un produit.
Défi
FacileTables et colonnes disponibles :
<strong>sales</strong>:<strong>month</strong>,<strong>product</strong>,<strong>units</strong>
Pivotez les données de sorte que chaque ligne représente un month avec ces colonnes :
monthapples: total desunitspour le produit'apples'ce mois-làbananas: idem pour'bananas'cherries: idem pour'cherries'total: total desunitspour tous les produits ce mois-là
Retournez uniquement les mois dont le total est d'au moins 20. Triez par month.
Aide-mémoire
Utilisez l'agrégation conditionnelle avec GROUP BY pour pivoter des lignes en colonnes :
SELECT
month,
SUM(CASE WHEN product = 'A' THEN units ELSE 0 END) AS product_a,
SUM(CASE WHEN product = 'B' THEN units ELSE 0 END) AS product_b,
SUM(units) AS total
FROM sales
GROUP BY month
HAVING SUM(units) >= threshold
ORDER BY monthChaque SUM(CASE …) additionne uniquement les lignes correspondant à ce produit au sein de chaque groupe GROUP BY.
Essayez vous-même
SELECT month,
-- un SUM(CASE ...) par produit, plus le total
FROM sales
GROUP BY month
-- filtrer pour les mois avec total >= 20
ORDER BY month
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Au-delà des bases
1Logique conditionnelle
CASE WHENCASE dans ORDER BYCOALESCE pour les NULLsNULLIF et IIFRécapitulatif - Présences3Agrégation conditionnelle
COUNT avec CASESUM avec CASEPivoter des lignes en colonnesRécapitulatif - Sources de trafic