Buscar..


Observaciones

La creación de consultas dinámicas en MySQL se basa en la función GROUP_CONCAT() . Si se espera que el resultado de la expresión que crea las columnas de la consulta dinámica sea grande, el valor de la variable group_concat_max_len debe aumentarse:

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

Creando una consulta dinámica

MySQL no proporciona una forma integrada para crear consultas dinámicas. Sin embargo, estos pueden ser creados usando declaraciones preparadas.

Supongamos la tabla tbl_values :

Carné de identidad Nombre Grupo Valor
1 Pete UNA 10
2 Pete segundo 20
3 Juan UNA 10

Solicitud: cree una consulta que muestre la suma del Value para cada Name ; el Group debe ser el encabezado de la columna y el Name debe ser el encabezado de la fila.

-- 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;

Resultado:

Nombre UNA segundo
Juan 10 NULO
Pete 10 20

Importante: desasigne la declaración preparada una vez que ya no sea necesaria:

deallocate prepare stmt;

Ejemplo en SQL Fiddle



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow