Maison >base de données >tutoriel mysql >Comment puis-je faire pivoter une table SQL à l'aide de CASE WHEN pour éviter les lignes en double ?

Comment puis-je faire pivoter une table SQL à l'aide de CASE WHEN pour éviter les lignes en double ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-11 15:47:431009parcourir

How Can I Pivot a SQL Table Using CASE WHEN to Avoid Duplicate Rows?

Utilisez l'instruction CASE WHEN en SQL pour effectuer le pivotement des colonnes

L'opération pivot dans SQL fait référence à la conversion de colonnes disposées verticalement dans la table de données en colonnes disposées horizontalement. Ceci est généralement accompli à l'aide de l'instruction CASE WHEN.

Supposons qu'il y ait un tableau avec trois colonnes : nom, valeur et montant. Le but est de transformer les données en une nouvelle représentation : chaque ligne représente un nom et chaque colonne représente une valeur spécifique dans la colonne val, telle que 'Val1' et 'Val2'.

Vous avez essayé d'écrire une requête initiale en utilisant une instruction CASE WHEN, mais les résultats ne sont pas tout à fait corrects. Plus précisément, les lignes pour John et Peter sont répétées deux fois, une ligne contenant la valeur du montant associée à val = 1 et l'autre ligne contenant la valeur du montant associée à val = 2.

Pour résoudre ce problème, nous pouvons utiliser la fonction d'agrégation SUM() en conjonction avec l'instruction CASE WHEN. En additionnant les montants associés à chaque valeur val, nous regroupons efficacement les lignes pour chaque nom et fusionnons les valeurs en une seule colonne.

La requête modifiée suivante produira les résultats souhaités :

<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 additionne le montant de chaque valeur val dans chaque groupe de noms et obtient le résultat suivant :

name amountVal1 amountVal2
John 2000 1888
Peter 1999 1854

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