Maison >base de données >tutoriel mysql >Comment transformer les données d'une colonne MySQL en un tableau croisé dynamique basé sur des lignes ?

Comment transformer les données d'une colonne MySQL en un tableau croisé dynamique basé sur des lignes ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-09 15:02:43183parcourir

How to Transform MySQL Column Data into a Row-Based Pivot Table?

Convertir les données des colonnes MySQL au format de ligne (tableau croisé dynamique)

Cet article décrit comment convertir une table MySQL contenant des données multi-colonnes en données au format ligne et colonne. La structure résultante est appelée tableau croisé dynamique et fournit une vue concise mais complète des données.

Énoncé du problème :

Nous avons un tableau avec plusieurs colonnes, chaque colonne représente une catégorie de données, notre objectif est de le convertir en format de tableau croisé dynamique, où les lignes représentent des catégories (col1, col2, col3, col4) et les colonnes représentent des mois ( janvier, février).

Cadre de solution :

Pour implémenter cette conversion dans MySQL, nous devons suivre le processus en deux étapes suivant :

Anti-Perspective (UNION TOUS) :

  1. Divisez les colonnes d'entrée (col1, col2, etc.) en lignes séparées, en créant une nouvelle colonne ("descrip") pour les catégories et une autre colonne pour les valeurs correspondantes. Utilisez l'opérateur UNION ALL pour combiner ces lignes en une seule table.

Perspective (agrégation et CASE) :

  1. Appliquez une fonction d'agrégation, telle que MAX(), au tableau non croisé tout en utilisant une instruction CASE pour déterminer quelles valeurs appartiennent à quel mois. Cela nous permet de créer les colonnes requises (janvier, février).

Requêtes implémentées :

Anti-Perspective (UNION TOUS) :

<code class="language-sql">SELECT
  id,
  month,
  col1 AS value,
  'col1' AS descrip
FROM
  yourtable
UNION ALL
SELECT
  id,
  month,
  col2 AS value,
  'col2' AS descrip
FROM
  yourtable
UNION ALL
SELECT
  id,
  month,
  col3 AS value,
  'col3' AS descrip
FROM
  yourtable
UNION ALL
SELECT
  id,
  month,
  col4 AS value,
  'col4' AS descrip
FROM
  yourtable;</code>

Perspective (agrégation et CASE) :

<code class="language-sql">SELECT
  descrip,
  MAX(CASE WHEN month = 'Jan' THEN value ELSE 0 END) AS Jan,
  MAX(CASE WHEN month = 'Feb' THEN value ELSE 0 END) AS Feb
FROM
  (
    SELECT
      id,
      month,
      col1 AS value,
      'col1' AS descrip
    FROM
      yourtable
    UNION ALL
    SELECT
      id,
      month,
      col2 AS value,
      'col2' AS descrip
    FROM
      yourtable
    UNION ALL
    SELECT
      id,
      month,
      col3 AS value,
      'col3' AS descrip
    FROM
      yourtable
    UNION ALL
    SELECT
      id,
      month,
      col4 AS value,
      'col4' AS descrip
    FROM
      yourtable
  ) AS source
GROUP BY
  descrip;</code>

Résultat :

Cette requête convertira le tableau d'entrée au format tableau croisé dynamique :

DESCRIP Jan Feb
col1 A C
col2 B A
col3 0 G
col4 B E

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