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
Libérer: 2025-01-25 11:26:10
original
605 Les gens l'ont consulté

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

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!

source:php.cn
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