Maison > base de données > tutoriel mysql > Comment faire pivoter une colonne dans SQL en utilisant CASE WHEN et SUM() ?

Comment faire pivoter une colonne dans SQL en utilisant CASE WHEN et SUM() ?

Mary-Kate Olsen
Libérer: 2025-01-11 15:51:46
original
700 Les gens l'ont consulté

How to Pivot a Column in SQL Using CASE WHEN and SUM()?

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 » :

Bank:
name  val   amount
John   1     2000
Peter  1     1999
Peter  2     1854
John   2     1888
Copier après la connexion

Notre objectif est de transformer ce tableau au format suivant :

name  amountVal1 amountVal2
John    2000        1888
Peter   1999        1854
Copier après la connexion
Copier après la connexion

Pourquoi un simple CASE QUAND échoue

Une approche naïve utilisant uniquement CASE WHEN pourrait ressembler à ceci :

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;
Copier après la connexion

Cela produit un résultat incorrect :

name  amountVal1 amountVal2
John    2000        0
Peter   1999        0
John    0          1888
Peter   0          1854
Copier après la connexion

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 :

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;
Copier après la connexion

Cette requête produit correctement le tableau croisé dynamique :

name  amountVal1 amountVal2
John    2000        1888
Peter   1999        1854
Copier après la connexion
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal