MySQL
Requêtes pivot
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;
Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow