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

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

Barbara Streisand
Barbara Streisandoriginal
2025-01-25 11:32:13538parcourir

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

Remodeler la forme dans le format de colonne

Challenge

: Recherchez les données de la table MySQL dans une formule de forme de perspective et convertissez la ligne en colonne.

Question :

Étant donné un tableau contenant un hostide, un itemname et la colonne ItemValue, veuillez appuyer sur les résultats comme indiqué ci-dessous:

Solution

:

hostid A B C
1 10 3 0
2 9 0 40
Étape 1: Sélectionnez la colonne de intéressé

ok fournira des colonnes qui fourniront des valeurs y et des valeurs x (itemname).

Étape 2: étendez le tableau de base

Créer des colonnes supplémentaires pour chaque valeur X unique.

Étape 3: groupement et agrégation

groupId (hostid) et agréger la table d'extension.

<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>
Étape 4: Embellir (facultatif)

Remplacez la valeur nul à zéro pour obtenir une apparence plus claire.

Précautions et restrictions
<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>
:

Les valeurs utilisées dans la colonne d'extension et la valeur par défaut des valeurs manquantes peuvent être personnalisées.

Vous pouvez ajuster la fonction de polymérisation (par exemple, max).

<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>
Si vous utilisez plusieurs colonnes comme valeur Y ou un grand nombre de colonnes de perspective sont nécessaires, cette solution peut ne pas être applicable.

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