Funcion para calcular balance

06/05/2007 - 18:46 por principiante | Informe spam
Tengo una tabla: facturas(numerofactura,codigocliente, valor,fecha)
y otra tabla: pagos(numeropago, numerofactura, valorpagado, fechapago)
Es una relacion de 1 a N. (1 factura puede tener N pagos).

Y necesito hacer una funcion para calcular el balance de un cliente a una
fecha.

Me pueden ayudar con el select para armar la funcion?
Tengo la idea pero no tengo claro como hacer el sum:

select facturas.valor, sum(pagos.valorpagado) as pagado
from facturas
inner join pagos on pagos.numerofactura=facturas.numerofactura and
pagos.fechapago<@fecha
where cliente=@cliente and facturas.fecha<@fecha
group by facturas.valor

Lo que debo devolver es un solo valor ya que el select indicado me lo da
para cada factura.
Nota: debe estar dentro de una funcion.

Gracias

Jose TH

Preguntas similare

Leer las respuestas

#1 Javier Loria
07/05/2007 - 01:53 | Informe spam
Hola;
La consulta para una sola factura seria:
=SELECT
SUM(Facturas.valor) AS Ventas
, SUM(Pagos.Valorpagado) as Pagos
, SUM(Facturas.valor) - SUM(Pagos.Valorpagado) AS Saldoso
FROM facturas
INNER JOIN pagos
ON Fagos.numerofactura=facturas.numerofactura
and pagos.fechapago<@fecha
where cliente=@cliente
and facturas.fecha<@fecha
= La consulta para todos los clientes:
SELECT facturas.cliente
SUM(Facturas.valor) AS Ventas
, SUM(Pagos.Valorpagado) as Pagos
, SUM(Facturas.valor) - SUM(Pagos.Valorpagado) AS Saldoso
FROM facturas
INNER JOIN pagos
ON Pagos.numerofactura=facturas.numerofactura
and pagos.fechapago<@fecha
where facturas.fecha<@fecha
GROUP BY Facturas.Cliente
= Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"principiante" wrote in message
news:%23wCFV4$
Tengo una tabla: facturas(numerofactura,codigocliente, valor,fecha)
y otra tabla: pagos(numeropago, numerofactura, valorpagado, fechapago)
Es una relacion de 1 a N. (1 factura puede tener N pagos).

Y necesito hacer una funcion para calcular el balance de un cliente a una
fecha.

Me pueden ayudar con el select para armar la funcion?
Tengo la idea pero no tengo claro como hacer el sum:

select facturas.valor, sum(pagos.valorpagado) as pagado
from facturas
inner join pagos on pagos.numerofactura=facturas.numerofactura and
pagos.fechapago<@fecha
where cliente=@cliente and facturas.fecha<@fecha
group by facturas.valor

Lo que debo devolver es un solo valor ya que el select indicado me lo da
para cada factura.
Nota: debe estar dentro de una funcion.

Gracias

Jose TH

Respuesta Responder a este mensaje
#2 Javier Loria
07/05/2007 - 02:02 | Informe spam
Hola:
La primera consulta se refiere para un solo cliente.
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"Javier Loria" wrote in message
news:
Hola;
La consulta para una sola factura seria:
=> SELECT
SUM(Facturas.valor) AS Ventas
, SUM(Pagos.Valorpagado) as Pagos
, SUM(Facturas.valor) - SUM(Pagos.Valorpagado) AS Saldoso
FROM facturas
INNER JOIN pagos
ON Fagos.numerofactura=facturas.numerofactura
and pagos.fechapago<@fecha
where cliente=@cliente
and facturas.fecha<@fecha
=> La consulta para todos los clientes:
SELECT facturas.cliente
SUM(Facturas.valor) AS Ventas
, SUM(Pagos.Valorpagado) as Pagos
, SUM(Facturas.valor) - SUM(Pagos.Valorpagado) AS Saldoso
FROM facturas
INNER JOIN pagos
ON Pagos.numerofactura=facturas.numerofactura
and pagos.fechapago<@fecha
where facturas.fecha<@fecha
GROUP BY Facturas.Cliente
=> Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"principiante" wrote in message
news:%23wCFV4$
Tengo una tabla: facturas(numerofactura,codigocliente, valor,fecha)
y otra tabla: pagos(numeropago, numerofactura, valorpagado, fechapago)
Es una relacion de 1 a N. (1 factura puede tener N pagos).

Y necesito hacer una funcion para calcular el balance de un cliente a una
fecha.

Me pueden ayudar con el select para armar la funcion?
Tengo la idea pero no tengo claro como hacer el sum:

select facturas.valor, sum(pagos.valorpagado) as pagado
from facturas
inner join pagos on pagos.numerofactura=facturas.numerofactura and
pagos.fechapago<@fecha
where cliente=@cliente and facturas.fecha<@fecha
group by facturas.valor

Lo que debo devolver es un solo valor ya que el select indicado me lo da
para cada factura.
Nota: debe estar dentro de una funcion.

Gracias

Jose TH




Respuesta Responder a este mensaje
#3 principiante
07/05/2007 - 03:08 | Informe spam
Hola;
La consulta para una sola factura seria:
=> SELECT
SUM(Facturas.valor) AS Ventas
, SUM(Pagos.Valorpagado) as Pagos
, SUM(Facturas.valor) - SUM(Pagos.Valorpagado) AS Saldoso
FROM facturas
INNER JOIN pagos
ON Fagos.numerofactura=facturas.numerofactura
and pagos.fechapago<@fecha
where cliente=@cliente
and facturas.fecha<@fecha



Lo probe con esa idea pero me calcula mal la columna "Ventas" cuando una
factura tiene mas de un abono. Precisamente ese es el poblema que tengo.
Ejemplo si el valor de una factura es de 100 y tiene tres pagos (60, 30 y
10 ) la columna ventas me devuelve 300 (incorrecto) y la columna pagos me
devuelve 100 (lo correcto) y la de Saldo me devuelve 200 cuando deberia ser
0 (cero).


Saludos

Jose TH
Respuesta Responder a este mensaje
#4 Javier Loria
07/05/2007 - 04:18 | Informe spam
Hola:
Ummm. strike one ;)
Veamos que tal al segundo:
= SELECT
SUM(Facturas.valor) AS Ventas
, SUM(Pagos.Valorpagado) as Pagos
, SUM(Facturas.valor) - SUM(Pagos.Valorpagado) AS Saldoso
FROM facturas
INNER JOIN (SELECT Pagos.numerofactura
, SUM(Pagos.Valorpagado) AS
Valorpagado
FROM pagos
WHERE Pagos.fechapago<@fecha
GROUP BY Pagos.numerofactura) AS Pagos
ON Fagos.numerofactura=facturas.numerofactura
WHERE cliente=@cliente
and facturas.fecha<@fecha
=Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"principiante" wrote in message
news:%233Rj$
Hola;
La consulta para una sola factura seria:
=>> SELECT
SUM(Facturas.valor) AS Ventas
, SUM(Pagos.Valorpagado) as Pagos
, SUM(Facturas.valor) - SUM(Pagos.Valorpagado) AS Saldoso
FROM facturas
INNER JOIN pagos
ON Fagos.numerofactura=facturas.numerofactura
and pagos.fechapago<@fecha
where cliente=@cliente
and facturas.fecha<@fecha



Lo probe con esa idea pero me calcula mal la columna "Ventas" cuando una
factura tiene mas de un abono. Precisamente ese es el poblema que tengo.
Ejemplo si el valor de una factura es de 100 y tiene tres pagos (60, 30 y
10 ) la columna ventas me devuelve 300 (incorrecto) y la columna pagos me
devuelve 100 (lo correcto) y la de Saldo me devuelve 200 cuando deberia
ser 0 (cero).


Saludos

Jose TH

Respuesta Responder a este mensaje
#5 Ricardo Passians
07/05/2007 - 12:48 | Informe spam
Prueba esta opción (usando una subconsulta tambien):

select @facturado=sum(PagosAFacturas.valor),
@pagado=sum(PagosAFacturas.pagado) from
(
select facturas.numerofactura, facturas.valor, sum(pagos.valorpagado) as
pagado
from facturas
inner join pagos on pagos.numerofactura=facturas.numerofactura and
pagos.fechapago<@fecha
where cliente=@cliente and facturas.fecha<@fecha
group by facturas.numerofactura, facturas.valor
) PagosAFacturas

El balance lo tienes en @

No la he chequeado pero puedes revisar el plan de ejecución para ver cual
solución puede ser mas eficiente (en comparacion con la de Javier).

Espero te sirva.

Ricardo Passians


"principiante" escribió en el mensaje
news:%233Rj$
Hola;
La consulta para una sola factura seria:
=>> SELECT
SUM(Facturas.valor) AS Ventas
, SUM(Pagos.Valorpagado) as Pagos
, SUM(Facturas.valor) - SUM(Pagos.Valorpagado) AS Saldoso
FROM facturas
INNER JOIN pagos
ON Fagos.numerofactura=facturas.numerofactura
and pagos.fechapago<@fecha
where cliente=@cliente
and facturas.fecha<@fecha



Lo probe con esa idea pero me calcula mal la columna "Ventas" cuando una
factura tiene mas de un abono. Precisamente ese es el poblema que tengo.
Ejemplo si el valor de una factura es de 100 y tiene tres pagos (60, 30 y
10 ) la columna ventas me devuelve 300 (incorrecto) y la columna pagos me
devuelve 100 (lo correcto) y la de Saldo me devuelve 200 cuando deberia
ser 0 (cero).


Saludos

Jose TH

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida