luis12011988
Bovino maduro
- Desde
- 4 Jun 2011
- Mensajes
- 294
- Tema Autor
- #1
Siguiendo este ejemplo:
SELECT des_proveedor,
round(sum(case when year(fecha)=2006 then monto_total end),2) as "2006",
round(sum(case when year(fecha)=2007 then monto_total end),2) as "2007"
FROM tb_documento A,tb_detalle_documento B,tb_producto C,tb_proveedor D
where A.id_documento=B.id_documento and B.id_producto=C.id_producto and
C.id_proveedor=D.id_proveedor
group by 1
order by 1
alguien me podria ayudar a crear un codigo dinamico en mysql a base de cursores en la cual cada vez que recorra esa seleccion me actualice la referencia cruzada respecto al año asi como se muestra en la imagen?
aqui les comparto las tablas a utilizar:
CREATE TABLE `tb_documento` (
`id_documento` varchar(8) NOT NULL,
`id_cliente` varchar(5) DEFAULT NULL,
`id_tipdoc` varchar(5) DEFAULT NULL,
`fecha` datetime DEFAULT NULL,
`ruc` varchar(8) DEFAULT NULL,
`monto_total` float DEFAULT NULL,
PRIMARY KEY (`id_documento`),
KEY `pk_id_cliente` (`id_cliente`),
KEY `pk_id_tipdoc` (`id_tipdoc`),
CONSTRAINT `pk_id_cliente` FOREIGN KEY (`id_cliente`) REFERENCES `tb_cliente` (`id_cliente`),
CONSTRAINT `pk_id_tipdoc` FOREIGN KEY (`id_tipdoc`) REFERENCES `tb_tipo_documento` (`id_tipdoc`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `tb_detalle_documento` (
`id_detdoc` varchar(8) NOT NULL,
`id_producto` varchar(5) DEFAULT NULL,
`id_documento` varchar(8) DEFAULT NULL,
`cantidad` int(11) DEFAULT NULL,
PRIMARY KEY (`id_detdoc`),
KEY `pk_id_producto` (`id_producto`),
KEY `pk_id_documento` (`id_documento`),
CONSTRAINT `pk_id_documento` FOREIGN KEY (`id_documento`) REFERENCES `tb_documento` (`id_documento`),
CONSTRAINT `pk_id_producto` FOREIGN KEY (`id_producto`) REFERENCES `tb_producto` (`id_producto`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `tb_producto` (
`id_producto` varchar(5) NOT NULL,
`id_proveedor` varchar(5) DEFAULT NULL,
`des_producto` varchar(30) DEFAULT NULL,
`stock` int(11) DEFAULT NULL,
`precio` float DEFAULT NULL,
PRIMARY KEY (`id_producto`),
KEY `pk_id_proveedor` (`id_proveedor`),
CONSTRAINT `pk_id_proveedor` FOREIGN KEY (`id_proveedor`) REFERENCES `tb_proveedor` (`id_proveedor`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `tb_proveedor` (
`id_proveedor` varchar(5) NOT NULL,
`des_proveedor` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id_proveedor`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SELECT des_proveedor,
round(sum(case when year(fecha)=2006 then monto_total end),2) as "2006",
round(sum(case when year(fecha)=2007 then monto_total end),2) as "2007"
FROM tb_documento A,tb_detalle_documento B,tb_producto C,tb_proveedor D
where A.id_documento=B.id_documento and B.id_producto=C.id_producto and
C.id_proveedor=D.id_proveedor
group by 1
order by 1
alguien me podria ayudar a crear un codigo dinamico en mysql a base de cursores en la cual cada vez que recorra esa seleccion me actualice la referencia cruzada respecto al año asi como se muestra en la imagen?
aqui les comparto las tablas a utilizar:
CREATE TABLE `tb_documento` (
`id_documento` varchar(8) NOT NULL,
`id_cliente` varchar(5) DEFAULT NULL,
`id_tipdoc` varchar(5) DEFAULT NULL,
`fecha` datetime DEFAULT NULL,
`ruc` varchar(8) DEFAULT NULL,
`monto_total` float DEFAULT NULL,
PRIMARY KEY (`id_documento`),
KEY `pk_id_cliente` (`id_cliente`),
KEY `pk_id_tipdoc` (`id_tipdoc`),
CONSTRAINT `pk_id_cliente` FOREIGN KEY (`id_cliente`) REFERENCES `tb_cliente` (`id_cliente`),
CONSTRAINT `pk_id_tipdoc` FOREIGN KEY (`id_tipdoc`) REFERENCES `tb_tipo_documento` (`id_tipdoc`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `tb_detalle_documento` (
`id_detdoc` varchar(8) NOT NULL,
`id_producto` varchar(5) DEFAULT NULL,
`id_documento` varchar(8) DEFAULT NULL,
`cantidad` int(11) DEFAULT NULL,
PRIMARY KEY (`id_detdoc`),
KEY `pk_id_producto` (`id_producto`),
KEY `pk_id_documento` (`id_documento`),
CONSTRAINT `pk_id_documento` FOREIGN KEY (`id_documento`) REFERENCES `tb_documento` (`id_documento`),
CONSTRAINT `pk_id_producto` FOREIGN KEY (`id_producto`) REFERENCES `tb_producto` (`id_producto`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `tb_producto` (
`id_producto` varchar(5) NOT NULL,
`id_proveedor` varchar(5) DEFAULT NULL,
`des_producto` varchar(30) DEFAULT NULL,
`stock` int(11) DEFAULT NULL,
`precio` float DEFAULT NULL,
PRIMARY KEY (`id_producto`),
KEY `pk_id_proveedor` (`id_proveedor`),
CONSTRAINT `pk_id_proveedor` FOREIGN KEY (`id_proveedor`) REFERENCES `tb_proveedor` (`id_proveedor`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `tb_proveedor` (
`id_proveedor` varchar(5) NOT NULL,
`des_proveedor` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id_proveedor`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
