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;

Esempio su SQL Fiddle



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow