Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Mostrar diferencia de dos cálculos !!! (https://www.clubdelphi.com/foros/showthread.php?t=15850)

vpepen 07-11-2004 13:59:23

Mostrar diferencia de dos cálculos !!!
 
Hola Foro:

Tengo el siguiente problemita y espero que me den una mano con esto.

Tengo dos tablas:

Tabla: Cuenta
Codigo
Nombre

Tabla: Movimientos
Fecha
Cod_Cta
Tipo_Mov // 'D' -> Débido, 'C' -> Crédito
Monto

He realizado una consulta para determinar los débidos de una cuenta:

Select Sum(Monto) From Movimientos Where Cod_Cta = '01' and Tipo_Mov = 'D'

Para el caso de los créditos:

Select Sum(Monto) From Movimientos Where Cod_Cta = '01' and Tipo_Mov = 'C'

Ahora bien, necesito determinar el balance de la cuenta, es decir, débidos menos créditos, pero la verdad es que no la pego en eso.

Las gracias anticipadas,

Víctor.-

Tony_G 07-11-2004 18:42:59

Hola Víctor.

En MySql la siguiente consulta te devolverá el dato que buscas.

Select Sum(If(Movimientos.Tipo_mov=’D’,Monto,-Monto)) From Movimientos Where Cod_Cta = '01';

Espero que te sirva.

Saludos, Tony.

vpepen 08-11-2004 15:45:22

Gracias Tony por la aclaración del tipo de GBD usado. Estoy utilizando InterBase 6 versión 6.

Lamentablemente esa consulta no me funciona en interbase. me envía el siguiente error:

Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, char 11
If
Statement: Select Sum(If(Movimientos.Tipo_mov=’D’,Monto,-Monto)) From Movimientos Where Cod_Cta = '01'

Atte: Víctor.-

Tony_G 09-11-2004 07:27:05

Hola Víctor.

El error que te devuelve es (si no me equivoco) porque la versión 6 de Interbase no tiene la función IF(). No sé si en la versión 7 la han incorporado o alguna equivalente.

Como alternativa puedes hacer dos cosas:

a) Haces dos consultas, una para sumar los Débitos y otra para sumar los Créditos y luego restas.

b) Te creas un Procedimiento Almacenado (Stored Procedure) que reciba como parámetro la cuenta que quieres consultar y que devuelva el balance de la misma.

Si la consulta la haces desde distintos puntos del programa quizás sea más conveniente utilizar la opción b).

Espero que esto te sirva de ayuda.

Saludos, Tony.

Cabanyaler 09-11-2004 10:38:04

Hola, no sé si con esto se complicaría el tema, pero ¿ y si lo haces en una TADOQuery y añades un campo calculado con la diferencia entre debitos y creditos?, de ese modo tendrías linea a línea dicha diferencia.
Suerte, y espero haber apprtado algo. ;)

vpepen 09-11-2004 15:51:54

Tony, creo que preferiré la opción 'b', ya que me interesa en estos momentos el manejo de la misma no a nivel de procedimientos almacenados.

Por otra parte, Cabanyaler, gracias por responder e interesarte en mí problemita, pero la verdad es que la consulta que estoy haciendo es desde el IBConsole que trae consigo InterBase 6, es decir, no es a nivel de programación.

Las gracias anticipadas,


Víctor.-


La franja horaria es GMT +2. Ahora son las 10:59:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi