MySQL
Consultas de pivote
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;
Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow