Utiliser CASE WHEN et SUM() pour faire pivoter une colonne en SQL
La transformation des données nécessite souvent de remodeler les tableaux, de déplacer les données des lignes vers les colonnes, un processus appelé pivotement. Cet exemple montre comment faire pivoter une colonne en SQL en utilisant CASE WHEN
et SUM()
.
Considérons un exemple de table nommée « Banque » :
<code class="language-sql">Bank: name val amount John 1 2000 Peter 1 1999 Peter 2 1854 John 2 1888</code>
Notre objectif est de transformer ce tableau au format suivant :
<code class="language-sql">name amountVal1 amountVal2 John 2000 1888 Peter 1999 1854</code>
Pourquoi un simple CASE QUAND échoue
Une approche naïve utilisant uniquement CASE WHEN
pourrait ressembler à ceci :
<code class="language-sql">SELECT name, CASE WHEN val = 1 THEN amount ELSE 0 END AS amountVal1, CASE WHEN val = 2 THEN amount ELSE 0 END AS amountVal2 FROM bank;</code>
Cela produit un résultat incorrect :
<code class="language-sql">name amountVal1 amountVal2 John 2000 0 Peter 1999 0 John 0 1888 Peter 0 1854</code>
Le problème est que chaque ligne est traitée indépendamment. Nous devons agréger les résultats.
La bonne solution avec SUM()
La solution réside dans l'utilisation de la fonction d'agrégation SUM()
pour additionner les valeurs amount
pour chaque combinaison name
et val
:
<code class="language-sql">SELECT name, SUM(CASE WHEN val = 1 THEN amount ELSE 0 END) AS amountVal1, SUM(CASE WHEN val = 2 THEN amount ELSE 0 END) AS amountVal2 FROM bank GROUP BY name;</code>
Cette requête produit correctement le tableau croisé dynamique :
<code class="language-sql">name amountVal1 amountVal2 John 2000 1888 Peter 1999 1854</code>
La clause GROUP BY name
garantit que la fonction SUM()
agrège les montants pour chaque nom unique. Les instructions CASE WHEN
attribuent conditionnellement des montants aux colonnes appropriées (amountVal1
et amountVal2
), traitant les cas où un val
particulier est absent pour un nom donné en utilisant 0 comme valeur par défaut. Cette technique fournit un moyen concis et efficace d'effectuer le pivotement de colonnes en SQL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!