Comunidad de diseño web y desarrollo en internet online

Ayudita con una sumatoria acumulativa en storedpreocedure

Citar            
MensajeEscrito el 19 Ene 2009 06:34 am
Aca mi storedprocedure:

Código MySQL :

DELIMITER $$

DROP PROCEDURE IF EXISTS `bdutandas`.`GetConcentrado` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `GetConcentrado`(mesi integer,mesf integer,yearange integer,TipoCuenta varchar(20),estado integer)
BEGIN
SET @Suma=0;
 IF estado > 1 Then
   SELECT Cu.Tipo_Cuenta,C.num_cliente As 'No. Cliente',CONCAT(C.nombre,' ',C.apellidop,' ',C.apellidom)As Nombre,Cu.num_cuenta As 'No. Cta',CAST(D.Fecha AS CHAR) AS Fecha,D.id_deposito As 'NO',D.monto As 'Depositado',(@Suma:=(@suma+D.monto)) As Sumatoria,CAST(IF(tipo_cuenta='Semanal',WEEK(NOW()),IF(tipo_cuenta='Quincenal',FLOOR(WEEK(NOW())/2),'Ninguna')) AS CHAR) As 'Periodo Actual',Sum(D.monto)/Cu.monto_abono As 'Periodos Acreditados' FROM depositos D INNER JOIN cuentas Cu ON Cu.id_cuentas=D.id_cuenta INNER JOIN Clientes C ON C.id_cliente=Cu.id_cliente WHERE D.registrado=1 AND MONTH(cu.fecha_inicio)>=mesi AND MONTH(cu.fecha_inicio)<=mesf AND YEAR(Cu.fecha_inicio)=yearange AND Cu.tipo_cuenta LIKE CONCAT("%",TipoCuenta,"%") GROUP BY D.id_deposito ORDER BY D.id_deposito ASC;
 ELSE
   SELECT C.num_cliente As 'No. Cliente',Cu.num_cuenta As 'No. Cta',CAST(D.Fecha AS CHAR) AS Fecha,D.id_deposito As 'NO',D.monto As Depositado,(@Suma:=(D.monto+ @Suma)) As Sumatoria,CAST(IF(tipo_cuenta='Semanal',WEEK(NOW()),IF(tipo_cuenta='Quincenal',FLOOR(WEEK(NOW())/2),'Ninguna')) AS CHAR) As 'Periodo Actual',Sum(D.monto)/Cu.monto_abono As 'Periodos Acreditados' FROM depositos D INNER JOIN cuentas Cu ON Cu.id_cuentas=D.id_cuenta INNER JOIN Clientes C ON C.id_cliente=Cu.id_cliente WHERE D.registrado=1 AND MONTH(cu.fecha_inicio)>=mesi AND MONTH(cu.fecha_inicio)<=mesf AND YEAR(Cu.fecha_inicio)=yearange AND Cu.registrado=estado AND Cu.tipo_cuenta LIKE CONCAT("%",TipoCuenta,"%") GROUP BY D.id_deposito;
 END IF;
END $$

DELIMITER ;


Pasa algo raro, cuando son pocos registros la sumatoria va como debiera; pero ya con algunos(actualmente 1000 van comenzando) comienza a dar sumatorias erraticas; pe:}
Depositado Sumatoria
$2,000.00 $172,300.00
$500.00 $169,800.00
$400.00 $175,500.00
$1,000.00 $168,300.00


Cuando deberia ser:

escribió:

Depositado Sumatoria
$2,000.00 $2,000.00
$500.00 $2,500.00
$400.00 $2,900.00
$1,000.00 $3,900.00

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox
Citar            
MensajeEscrito el 19 Ene 2009 06:35 am
ya probe quitar @suma+D.monto y cambiarlo por @suma+1 y tambien por D.monto+1 y en el primer caso va de 1 en uno; y en el segundo caso pone el monto correspondiente a la fila con una unidad incrementada.

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox
Citar            
MensajeEscrito el 20 Ene 2009 05:10 pm
Creo que puede resolverse así, primero haz el sql sin la sumatoria, luego mételo entre parentesis y haz algo como esto:

Código :

Select *,(@Suma:=(@suma+the_result.monto)  FROM (the biggest SQL) AS the_result

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 26 Ene 2009 03:19 pm
Hasta ahora habia podido checarlo, intente con este SQL:

Código MySQL :

SELECT *,(@Suma:=(@suma+resultado.monto) FROM (SELECT Cu.Tipo_Cuenta,C.num_cliente As 'No. Cliente',CONCAT(C.nombre,' ',C.apellidop,' ',C.apellidom)As Nombre,Cu.num_cuenta As 'No. Cta',CAST(D.Fecha AS CHAR) AS Fecha,D.id_deposito As 'NO',D.monto As 'Depositado',CAST(IF(tipo_cuenta='Semanal',WEEK(NOW()),IF(tipo_cuenta='Quincenal',FLOOR(WEEK(NOW())/2),'Ninguna')) AS CHAR) As 'Periodo Actual',Sum(D.monto)/Cu.monto_abono As 'Periodos Acreditados' FROM depositos D INNER JOIN cuentas Cu ON Cu.id_cuentas=D.id_cuenta INNER JOIN Clientes C ON C.id_cliente=Cu.id_cliente WHERE D.registrado=1 AND MONTH(cu.fecha_inicio)>=mesi AND MONTH(cu.fecha_inicio)<=mesf AND YEAR(Cu.fecha_inicio)=yearange AND Cu.tipo_cuenta LIKE CONCAT("%",TipoCuenta,"%") GROUP BY D.id_deposito ORDER BY D.id_deposito ASC) As resultado;

y me marca este error:
Script line: 4 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM (SELECT Cu.Tipo_Cuenta,C.num_cliente As 'No. Cliente',CONCAT(C.nombre,' ',C' at line 5

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.