viernes, 17 de agosto de 2012

Código que puedes necesitar para un reporte dinamico en Mysql

Tablas temporales que se creen al vuelo.

CREATE TEMPORARY TABLE tuzo_report
SELECT d.id, d.name
FROM tuzos d
INNER JOIN legs l ON l.dog_id=d.id
INNER JOIN nails n ON n.leg_id=l.id
GROUP BY d.id
HAVING MIN(n.last_clipped) < DATE_SUB(NOW(), INTERVAL 1 MONTH);
 
Concatenar variables
 
select person_id, group_concat(hobbies separator ', ')
from peoples_hobbies group by person_id; 
 
SELECT GROUP_CONCAT(DISTINCT CONCAT("`",usuario,"`") SEPARATOR "+") 
INTO @sumaVertical
FROM X
Este caracter ` identifica las columnas aunque tengan espacios.

Pivotear Tablas.

 SELECT
        SUM(CASE WHEN Enero THEN ROUND(Enero,2) END)Enero,
        SUM(CASE WHEN Febrero THEN ROUND(Febrero,2) END)Febrero,
        SUM(CASE WHEN Marzo THEN ROUND(Marzo,2) END)Marzo,
        SUM(CASE WHEN Abril THEN ROUND(Abril,2) END)Abril,
        SUM(CASE WHEN Mayo THEN ROUND(Mayo,2) END)Mayo,
        SUM(CASE WHEN Junio THEN ROUND(Junio,2) END)Junio,
        SUM(CASE WHEN Julio THEN ROUND(Julio,2) END)Julio,
        SUM(CASE WHEN Agosto THEN ROUND(Agosto,2) END)Agosto,
        SUM(CASE WHEN Septiembre THEN ROUND(Septiembre,2) END)Septiembre,
        SUM(CASE WHEN Octubre THEN ROUND(Octubre,2) END)Octubre,
        SUM(CASE WHEN Noviembre THEN ROUND(Noviembre,2) END)Noviembre,
        SUM(CASE WHEN Diciembre THEN ROUND(Diciembre,2) END)Diciembre,
FROM meses

Aumentar los carateres de concatenamiento de la Sesion

SET SESSION group_concat_max_len = 1000000;

Sin Sesión tomado de stackoverflow. Thank you ZeWaren :).

CREATE TABLE some_table (
  field1 int(11) NOT NULL AUTO_INCREMENT,
  field2 varchar(10) NOT NULL,
  field3 varchar(10) NOT NULL,
  PRIMARY KEY (`field1`)
);
INSERT INTO `some_table` (field1, field2, field3) VALUES
(1, 'text one', 'foo'),
(2, 'text two', 'bar'),
(3, 'text three', 'data'),
(4, 'text four', 'magic');

SELECT resultFROM   (SELECT @result := '',
               (SELECT result
                FROM   (SELECT @result := CONCAT_WS(';', @result, field2) AS result,
                               LENGTH(@result)                            AS blength
                        FROM   some_table
                        ORDER  BY blength DESC
                        LIMIT  1) AS sub1) AS result) AS sub2;
 
Sistaxis WITH ROLLUP para sacar totales.
 
Ejecutar las cadenas dinamicas
 
  PREPARE stmt FROM @sqlX;/*El smt es la cadena con que arme el select y el sqlx el from*/
  o 
  PREPARE stmt;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;  
 

No hay comentarios:

Publicar un comentario