Maison >base de données >tutoriel mysql >Comment pivoter une table dans MySQL: transformer les lignes en colonnes?

Comment pivoter une table dans MySQL: transformer les lignes en colonnes?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-25 11:26:10607parcourir

How to Pivot a Table in MySQL: Transforming Rows into Columns?

Remodeler le tableau pour convertir les lignes en colonnes

Question :

Convertissez un tableau à trois colonnes en tableau croisé dynamique, où les lignes deviennent des colonnes.

Exemple :

Formulaire de saisie :

hostid itemname itemvalue
1 A 10
1 B 3
2 A 9
2 C 40

Sortie requise (tableau croisé dynamique) :

hostid A B C
1 10 3 0
2 9 0 40

Solution :

La fonctionnalité pivot de MySQL implique un processus en trois étapes :

  1. Sélectionnez la colonne qui vous intéresse :
<code class="language-sql">SELECT hostid, itemname, itemvalue
FROM history;</code>
  1. Étendez la table de base avec des colonnes supplémentaires :

Ajoutez une colonne correspondant à chaque nom d'élément unique.

<code class="language-sql">CREATE VIEW history_extended AS (
  SELECT
    history.*,
    CASE WHEN itemname = "A" THEN itemvalue END AS A,
    CASE WHEN itemname = "B" THEN itemvalue END AS B,
    CASE WHEN itemname = "C" THEN itemvalue END AS C
  FROM history
);</code>
  1. Tables étendues de regroupement et d'agrégation :

Regroupez par hostid et additionnez les valeurs dans chaque colonne.

<code class="language-sql">CREATE VIEW history_itemvalue_pivot AS (
  SELECT
    hostid,
    SUM(A) AS A,
    SUM(B) AS B,
    SUM(C) AS C
  FROM history_extended
  GROUP BY hostid
);</code>
  1. Facultatif : embellir le tableau agrégé (remplacer les valeurs NULL par 0)
<code class="language-sql">CREATE VIEW history_itemvalue_pivot_pretty AS (
  SELECT
    hostid,
    COALESCE(A, 0) AS A,
    COALESCE(B, 0) AS B,
    COALESCE(C, 0) AS C
  FROM history_itemvalue_pivot
);</code>

Remarques et restrictions :

  • Cette solution suppose que la colonne pivot a une valeur spécifique (ici itemvalue).
  • Il prend en charge plusieurs valeurs y (hostid) mais se limite à l'ajout manuel de colonnes pivot.
  • Générer un tableau croisé dynamique avec un grand nombre de colonnes peut être un défi.

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