06 mayo 2010

Hacer un TRANSFORM con MySQL

Tenemos una tabla que contendrá las claves que queremos totalizar:

CREATE TABLE tCodApi (
CodApi VARCHAR(25) NOT NULL,
PRIMARY KEY(CodApi)
);

La llenamos con las claves que necesitamos.

INSERT INTO tCodApi
SELECT CodApi
FROM tramApis
GROUP BY CodApi;

Ahora generamos una consulta de la siguiente manera, con el select más externo, recorremos la tabla de claves, y el GROUP_CONCAT va generando una única cadena que contendrá todos los valores del grupo. El concat más externo nos facilitará la tarea de generar la cadena final.

select
concat (
"SELECT t.FechaPeticion ",
group_concat(
concat(
", SUM(IF(.tCodApi = '", api.CodApi, "', 1, 0)) as '", api.CodApi, "'"
)
order by api.CodApi
separator " "
),
" FROM TramitacionAPIS t ",
" GROUP BY FechaPeticion ",
" ORDER BY FechaPeticion DESC ",
" LIMIT 0,20; "

) as pepe
FROM tCodApi api
where api.CodApi<>"--"
order by api.CodApi;