luis12011988
Bovino maduro
- Desde
- 4 Jun 2011
- Mensajes
- 294
- Tema Autor
- #1
Hola a todos, tengo un problema con un trabajo de base de datos I, espero me puedan ayudar.
tengo una tabla tb_documento en la cual dentro de ella se encuentra el campo id_tipdoc que me da a conocer el id del tipo documento que es, ya sea para boleta con id 00001, factura con id 00002 y recibo con id 00003.
Aqui les dejo 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_tipo_documento` (
`id_tipdoc` varchar(5) NOT NULL,
`des_tipdoc` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id_tipdoc`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Como veran en la tabla tb_documento se encuentra el id de la tabla tb_tipo_documento.
Como referencia me han dado esta sentencia:
SELECT year(fecha) as annio,
round(sum(case when id_tipdoc='00001' then monto_total end),2) as Boleta,
round(sum(case when id_tipdoc='00002' then monto_total end),2) as Factura,
round(sum(case when id_tipdoc='00003' then monto_total end),2) as Recibo
FROM tb_documento A
group by 1
y lo que se quiere es crear un procedimiento almacenado que cuando añada un nuevo tipo documento en su respectiva tabla, por ejemplo xxxx con id 00004 me salga una nueva columna con su monto total recaudado por año.
Aqui les dejo una imagen para que tengan una idea de lo que quiero hacer:
tengo una tabla tb_documento en la cual dentro de ella se encuentra el campo id_tipdoc que me da a conocer el id del tipo documento que es, ya sea para boleta con id 00001, factura con id 00002 y recibo con id 00003.
Aqui les dejo 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_tipo_documento` (
`id_tipdoc` varchar(5) NOT NULL,
`des_tipdoc` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id_tipdoc`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Como veran en la tabla tb_documento se encuentra el id de la tabla tb_tipo_documento.
Como referencia me han dado esta sentencia:
SELECT year(fecha) as annio,
round(sum(case when id_tipdoc='00001' then monto_total end),2) as Boleta,
round(sum(case when id_tipdoc='00002' then monto_total end),2) as Factura,
round(sum(case when id_tipdoc='00003' then monto_total end),2) as Recibo
FROM tb_documento A
group by 1
y lo que se quiere es crear un procedimiento almacenado que cuando añada un nuevo tipo documento en su respectiva tabla, por ejemplo xxxx con id 00004 me salga una nueva columna con su monto total recaudado por año.
Aqui les dejo una imagen para que tengan una idea de lo que quiero hacer:
