Recherche…


Remarques

La création de requête de pivot dans MySQL repose sur la fonction GROUP_CONCAT() . Si le résultat de l'expression qui crée les colonnes de la requête pivot doit être élevé, la valeur de la variable group_concat_max_len doit être augmentée:

set session group_concat_max_len = 1024 * 1024; -- This should be enough for most cases

Création d'une requête pivot

MySQL ne fournit pas de moyen intégré pour créer des requêtes pivot. Cependant, ceux-ci peuvent être créés à l'aide d'instructions préparées.

Supposons la table tbl_values :

Id prénom Groupe Valeur
1 Pete UNE dix
2 Pete B 20
3 John UNE dix

Request: crée une requête qui affiche la somme de Value pour chaque Name ; le Group doit être un en-tête de colonne et le Name doit être l'en-tête de la ligne.

-- 1. Create an expression that builds the columns
set @sql = (
    select group_concat(distinct 
        concat(
            "sum(case when `Group`='", Group, "' then `Value` end) as `", `Group`, "`"
        )
    ) 
    from tbl_values
);

-- 2. Complete the SQL instruction
set @sql = concat("select Name, ", @sql, " from tbl_values group by `Name`");

-- 3. Create a prepared statement
prepare stmt from @sql;

-- 4. Execute the prepared statement
execute stmt;

Résultat:

prénom UNE B
John dix NUL
Pete dix 20

Important: libérez l'instruction préparée une fois qu'elle n'est plus nécessaire:

deallocate prepare stmt;

Exemple sur SQL Fiddle



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow