MySQL
Query pivot
Ricerca…
Osservazioni
La creazione di query pivot in MySQL si basa sulla funzione GROUP_CONCAT()
. Se il risultato dell'espressione che crea le colonne della query pivot dovrebbe essere grande, il valore della variabile group_concat_max_len
deve essere aumentato:
set session group_concat_max_len = 1024 * 1024; -- This should be enough for most cases
Creazione di una query pivot
MySQL non fornisce un modo integrato per creare query pivot. Tuttavia, questi possono essere creati utilizzando istruzioni preparate.
Assumi la tabella tbl_values
:
Id | Nome | Gruppo | Valore |
---|---|---|---|
1 | Pete | UN | 10 |
2 | Pete | B | 20 |
3 | John | UN | 10 |
Richiesta: creare una query che mostri la somma del Value
per ciascun Name
; il Group
deve essere intestazione di colonna e Name
deve essere l'intestazione di riga.
-- 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;
Risultato:
Nome | UN | B |
---|---|---|
John | 10 | NULLO |
Pete | 10 | 20 |
Importante: deallocare l'istruzione preparata quando non è più necessaria:
deallocate prepare stmt;
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow